Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Nim (programming language)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Nim_(programming_language)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Nim_programming_language rootpage-Nim_programming_language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Nim (programming language)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p class="mw-empty-elt">
</p>
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above" style="background-color:#e0e0e0;">Nim</th></tr><tr><td colspan="2" class="infobox-image"><span typeof="mw:File"></span><div class="infobox-caption">The Nim crown logo</div></td></tr><tr><th scope="row" class="infobox-label"><a href="Programming_paradigm" title="Programming paradigm">Paradigms</a></th><td class="infobox-data"><a href="Multi-paradigm_programming_language" class="mw-redirect" title="Multi-paradigm programming language">Multi-paradigm</a>: <a href="Compiled_language" title="Compiled language">compiled</a>, <a href="Concurrent_programming" class="mw-redirect" title="Concurrent programming">concurrent</a>, <a href="Procedural_programming" title="Procedural programming">procedural</a>, <a href="Imperative_programming" title="Imperative programming">imperative</a>, <a href="Functional_programming" title="Functional programming">functional</a>, <a href="Object-oriented_programming" title="Object-oriented programming">object-oriented</a>, <a href="Metaprogramming" title="Metaprogramming">meta</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_design" title="Software design">Designed&nbsp;by</a></th><td class="infobox-data">Andreas Rumpf</td></tr><tr><th scope="row" class="infobox-label"><a href="Software_developer" class="mw-redirect" title="Software developer">Developer</a></th><td class="infobox-data organiser">Nim Lang Team<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label">First&nbsp;appeared</th><td class="infobox-data">2008<span style="display:none">&nbsp;(<span class="bday dtstart published updated">2008</span>)</span></td></tr><tr><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">2.2.4<sup id="cite_ref-wikidata-83a142d5398fc9c18f74b427e707b0d4b8840ec1-v20_2-0" class="reference"><a href="#cite_note-wikidata-83a142d5398fc9c18f74b427e707b0d4b8840ec1-v20-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>&nbsp;
/ 22 April 2025<span style="display:none">&nbsp;(<span class="bday dtstart published updated">22 April 2025</span>)</span></div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label"><a href="Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="Static_typing" class="mw-redirect" title="Static typing">Static</a>,<sup id="cite_ref-nimbyex_3-0" class="reference"><a href="#cite_note-nimbyex-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> <a href="Strong_and_weak_typing" title="Strong and weak typing">strong</a>,<sup id="cite_ref-nimrodbg_4-0" class="reference"><a href="#cite_note-nimrodbg-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> <a href="Type_inference" title="Type inference">inferred</a>, <a href="Structural_type_system" title="Structural type system">structural</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Scope_(computer_science)" title="Scope (computer science)">Scope</a></th><td class="infobox-data"><a href="Scope_(computer_science)" title="Scope (computer science)">Lexical</a></td></tr><tr><th scope="row" class="infobox-label">Implementation language</th><td class="infobox-data"><a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a> (2005–2008)<br>Nim (2008–present, self-hosted)</td></tr><tr><th scope="row" class="infobox-label"><a href="Computing_platform" title="Computing platform">Platform</a></th><td class="infobox-data"><a href="IA-32" title="IA-32">IA-32</a>, <a href="X86-64" title="X86-64">x86-64</a>, <a href="ARM_architecture" class="mw-redirect" title="ARM architecture">ARM</a>, <a href="Aarch64" class="mw-redirect" title="Aarch64">Aarch64</a>, <a href="RISC-V" title="RISC-V">RISC-V</a>, <a href="PowerPC" title="PowerPC">PowerPC</a> ...<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label"><a href="Operating_system" title="Operating system">OS</a></th><td class="infobox-data"><a href="Cross-platform_software" title="Cross-platform software">Cross-platform</a><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data">MIT License<sup id="cite_ref-wikidata-2c4faa04ba9ab7f7c7e7132058c318982dc51916-v20_7-0" class="reference"><a href="#cite_note-wikidata-2c4faa04ba9ab7f7c7e7132058c318982dc51916-v20-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>&nbsp;</td></tr><tr><th scope="row" class="infobox-label"><a href="Filename_extension" title="Filename extension">Filename extensions</a></th><td class="infobox-data">.nim, .nims, .nimble</td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://nim-lang.org">nim-lang<wbr>.org</a></span></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="Ada_(programming_language)" title="Ada (programming language)">Ada</a>, <a href="Modula-3" title="Modula-3">Modula-3</a>, <a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>, <a href="C%2B%2B" title="C++">C++</a>, <a href="Object_Pascal" title="Object Pascal">Object Pascal</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="Oberon_(programming_language)" title="Oberon (programming language)">Oberon</a>, <a href="Rust_(programming_language)" title="Rust (programming language)">Rust</a>, <a href="ParaSail_(programming_language)" title="ParaSail (programming language)">ParaSail</a><sup id="cite_ref-parasail_8-0" class="reference"><a href="#cite_note-parasail-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup></td></tr></tbody></table>
<p><b>Nim</b> is a <a href="General-purpose_programming_language" title="General-purpose programming language">general-purpose</a>, <a href="Multi-paradigm_programming_language" class="mw-redirect" title="Multi-paradigm programming language">multi-paradigm</a>, <a href="Statically_typed" class="mw-redirect" title="Statically typed">statically typed</a>, <a href="Compiled_language" title="Compiled language">compiled</a> <a href="High-level_programming_language" title="High-level programming language">high-level</a> <a href="System_programming_language" title="System programming language">system</a> <a href="Programming_language" title="Programming language">programming language</a>,<sup id="cite_ref-drdobbs_9-0" class="reference"><a href="#cite_note-drdobbs-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> designed and developed by a team around Andreas Rumpf. Nim is designed to be "efficient, expressive, and elegant",<sup id="cite_ref-nim-lang_10-0" class="reference"><a href="#cite_note-nim-lang-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> supporting <a href="Metaprogramming" title="Metaprogramming">metaprogramming</a>, <a href="Functional_programming" title="Functional programming">functional</a>, <a href="Message_passing" title="Message passing">message passing</a>,<sup id="cite_ref-FAQ_11-0" class="reference"><a href="#cite_note-FAQ-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> <a href="Procedural_programming" title="Procedural programming">procedural</a>, and <a href="Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a> styles by providing several features such as <a href="Compile_time" title="Compile time">compile time</a> code generation, <a href="Algebraic_data_type" title="Algebraic data type">algebraic data types</a>, a <a href="Foreign_function_interface" title="Foreign function interface">foreign function interface</a> (FFI) with <a href="C_(programming_language)" title="C (programming language)">C</a>, <a href="C%2B%2B" title="C++">C++</a>, <a href="Objective-C" title="Objective-C">Objective-C</a>, and <a href="JavaScript" title="JavaScript">JavaScript</a>, and supporting compiling to those same languages as <a href="Intermediate_representation" title="Intermediate representation">intermediate representations</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Description">Description</h2></div><p>
Nim is statically typed.<sup id="cite_ref-Nim_Syntax_12-0" class="reference"><a href="#cite_note-Nim_Syntax-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> It supports compile-time <a href="Metaprogramming" title="Metaprogramming">metaprogramming</a> features such as syntactic macros and <a href="Macro_(computer_science)#Syntactic_macros" title="Macro (computer science)">term rewriting macros</a>.<sup id="cite_ref-manual_13-0" class="reference"><a href="#cite_note-manual-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Term rewriting macros enable <a href="Library_(computing)" title="Library (computing)">library</a> implementations of common data structures, such as bignums and matrices, to be implemented efficiently and with syntactic integration, as if they were built-in language facilities.<sup id="cite_ref-strangeloop_14-0" class="reference"><a href="#cite_note-strangeloop-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> Iterators are supported and can be used as first class entities,<sup id="cite_ref-manual_13-1" class="reference"><a href="#cite_note-manual-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> as can functions, allowing for the use of <a href="Functional_programming" title="Functional programming">functional programming</a> methods. <a href="Object-oriented_programming" title="Object-oriented programming">Object-oriented programming</a> is supported by <a href="Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inheritance</a> and <a href="Multiple_dispatch" title="Multiple dispatch">multiple dispatch</a>. Functions can be generic and overloaded, and <a href="Generic_programming" title="Generic programming">generics</a> are further enhanced by Nim's support for <a href="Type_class" title="Type class">type classes</a>. <a href="Operator_overloading" title="Operator overloading">Operator overloading</a> is also supported.<sup id="cite_ref-manual_13-2" class="reference"><a href="#cite_note-manual-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Nim includes multiple tunable memory management strategies, including <a href="Tracing_garbage_collection" title="Tracing garbage collection">tracing</a> <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collection</a>, <a href="Reference_counting" title="Reference counting">reference counting</a>, and <a href="Manual_memory_management" title="Manual memory management">fully manual systems</a>, with the default being deterministic <a href="Reference_counting" title="Reference counting">reference counting</a> with optimizations via <a href="Move_semantics" class="mw-redirect" title="Move semantics">move semantics</a> and <a href="Reference_counting#Dealing_with_reference_cycles" title="Reference counting">cycle collection</a> via trial deletion.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup><style data-mw-deduplicate="TemplateStyles:r1244412712">
/* start https://en.wikipedia.org/ */


.mw-parser-output .templatequote{overflow:hidden;margin:1em 0;padding:0 32px}.mw-parser-output .templatequotecite{line-height:1.5em;text-align:left;margin-top:0}@media(min-width:500px){.mw-parser-output .templatequotecite{padding-left:1.6em}}


/* end https://en.wikipedia.org/ */
</style></p><blockquote class="templatequote"><p>[Nim] ... presents a most original design that straddles <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a> and <a href="Python_(programming_language)" title="Python (programming language)">Python</a> and compiles to C code or JavaScript.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup></p></blockquote><div class="templatequotecite"><p style="display: inline; padding-left: 2.3em;">— Andrew Binstock, editor-in-chief of <a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a>, 2014</p></div>
<p>As of August&nbsp;2023, Nim compiles to C, C++, JavaScript, Objective-C,<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> and LLVM.<sup id="cite_ref-:1_18-0" class="reference"><a href="#cite_note-:1-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<table class="wikitable floatright" style="text-align:center; font-size: 85%;">

<tbody><tr>
<th>Branch
</th>
<th>Version
</th>
<th>Release date<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</th></tr>
<tr>
<td rowspan="11">0.x
</td>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.10.2"><span style="display: none;">Unsupported:</span> 0.10.2<style data-mw-deduplicate="TemplateStyles:r1295599781">
/* start https://en.wikipedia.org/ */


.mw-parser-output .version-legend{display:flex;flex-wrap:wrap;column-gap:12px}.mw-parser-output .version-legend-vertical{display:flex;flex-wrap:wrap;column-gap:4px;flex-direction:column}.mw-parser-output .version-legend .legend-item,.mw-parser-output .version-legend-vertical .legend-item{page-break-inside:avoid;break-inside:avoid-column;gap:4px}.mw-parser-output .version-legend .legend-item .swatch,.mw-parser-output .version-legend-vertical .legend-item .swatch{display:inline-block;width:1.25em;height:1.25em;border:1px solid #aaa;margin-top:1px}.mw-parser-output .swatch-unsupported{background-color:#fdb3ab}.mw-parser-output .swatch-maintained{background-color:#f8eaba}.mw-parser-output .swatch-latest{background-color:#d4f4b4}.mw-parser-output .swatch-preview{background-color:#c1e6f5}.mw-parser-output .swatch-future{background-color:#f2e2fc}@media screen{html.skin-theme-clientpref-night .mw-parser-output .version-legend .legend-item .swatch,html.skin-theme-clientpref-night .mw-parser-output .version-legend-vertical .legend-item .swatch{border-color:#72777d}html.skin-theme-clientpref-night .mw-parser-output .swatch-unsupported{background-color:#421511}html.skin-theme-clientpref-night .mw-parser-output .swatch-maintained{background-color:#433500}html.skin-theme-clientpref-night .mw-parser-output .swatch-latest{background-color:#334423}html.skin-theme-clientpref-night .mw-parser-output .swatch-preview{background-color:#154467}html.skin-theme-clientpref-night .mw-parser-output .swatch-future{background-color:#3C2e69}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .version-legend .legend-item .swatch,html.skin-theme-clientpref-os .mw-parser-output .version-legend-vertical .legend-item .swatch{border-color:#72777d}html.skin-theme-clientpref-os .mw-parser-output .swatch-unsupported{background-color:#421511}html.skin-theme-clientpref-os .mw-parser-output .swatch-maintained{background-color:#433500}html.skin-theme-clientpref-os .mw-parser-output .swatch-latest{background-color:#334423}html.skin-theme-clientpref-os .mw-parser-output .swatch-preview{background-color:#154467}html.skin-theme-clientpref-os .mw-parser-output .swatch-future{background-color:#3C2e69}}


/* end https://en.wikipedia.org/ */
</style>
</td>
<td>2014-12-29
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.11.2"><span style="display: none;">Unsupported:</span> 0.11.2
</td>
<td>2015-05-04
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.12.0"><span style="display: none;">Unsupported:</span> 0.12.0
</td>
<td>2015-10-27
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.13.0"><span style="display: none;">Unsupported:</span> 0.13.0
</td>
<td>2016-01-18
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.14.2"><span style="display: none;">Unsupported:</span> 0.14.2
</td>
<td>2016-06-09
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.15.2"><span style="display: none;">Unsupported:</span> 0.15.2
</td>
<td>2016-10-23
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.16.0"><span style="display: none;">Unsupported:</span> 0.16.0
</td>
<td>2017-01-08
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.17.2"><span style="display: none;">Unsupported:</span> 0.17.2
</td>
<td>2017-09-07
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.18.0"><span style="display: none;">Unsupported:</span> 0.18.0
</td>
<td>2018-03-01
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.19.6"><span style="display: none;">Unsupported:</span> 0.19.6
</td>
<td>2019-05-13
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="0.20.2"><span style="display: none;">Unsupported:</span> 0.20.2
</td>
<td>2019-06-17
</td></tr>
<tr>
<td rowspan="2">1.0
</td>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.0.0"><span style="display: none;">Unsupported:</span> 1.0.0
</td>
<td>2019-09-23
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.0.10"><span style="display: none;">Unsupported:</span> 1.0.10
</td>
<td>2020-10-27
</td></tr>
<tr>
<td rowspan="2">1.2
</td>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.2.0"><span style="display: none;">Unsupported:</span> 1.2.0
</td>
<td>2020-04-03
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.2.18"><span style="display: none;">Unsupported:</span> 1.2.18
</td>
<td>2022-02-09
</td></tr>
<tr>
<td rowspan="2">1.4
</td>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.4.0"><span style="display: none;">Unsupported:</span> 1.4.0
</td>
<td>2020-10-16
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.4.8"><span style="display: none;">Unsupported:</span> 1.4.8
</td>
<td>2021-05-25
</td></tr>
<tr>
<td rowspan="2">1.6
</td>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.6.0"><span style="display: none;">Unsupported:</span> 1.6.0
</td>
<td>2021-10-19
</td></tr>
<tr>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="1.6.20"><span style="display: none;">Unsupported:</span> 1.6.20
</td>
<td>2024-04-16
</td></tr>
<tr>
<td rowspan="2">2.0
</td>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="2.0.0"><span style="display: none;">Unsupported:</span> 2.0.0
</td>
<td>2023-08-01
</td></tr>
<tr>
<td class="templateVersion co swatch-maintained" style="color: var(--color-base, #202122);" title="Supported" data-sort-value="2.0.16"><span style="display: none;">Supported:</span> 2.0.16
</td>
<td>2025-04-22
</td></tr>
<tr>
<td rowspan="2">2.2
</td>
<td class="templateVersion co swatch-unsupported" style="color: var(--color-base, #202122);" title="Unsupported" data-sort-value="2.2.0"><span style="display: none;">Unsupported:</span> 2.2.0
</td>
<td>2024-10-02
</td></tr>
<tr>
<td class="templateVersion c swatch-latest" style="color: var(--color-base, #202122);" title="Latest version" data-sort-value="2.2.4"><span style="display: none;">Latest version:</span> <span style="font-weight: 600"> 2.2.4</span>
</td>
<td>2025-04-22
</td></tr>
<tr>
<td colspan="3"><div class="templateVersion l version-legend" style=""><div style=""><span style="white-space: nowrap;"><b>Legend:</b></span></div><div style="display: flex;" class="legend-item">Unsupported</div><div style="display: flex;" class="legend-item">Supported</div><div style="display: flex;" class="legend-item"><b>Latest version</b></div><div style="display: none;" class="legend-item">Preview version</div><div style="display: none;" class="legend-item">Future version</div></div>
</td></tr>
<tr>
<td colspan="3"><small>For each 0.x branch, only the latest point release is listed. <br>For later branches, the first and the latest point release is listed. </small>
</td></tr></tbody></table>
<p>Andreas Rumpf is the designer and original implementer of Nim. He received a diploma in computer science from the <a href="University_of_Kaiserslautern-Landau" title="University of Kaiserslautern-Landau">University of Kaiserslautern-Landau</a>, <a href="Germany" title="Germany">Germany</a>. His research interests include hard realtime systems, embedded systems, compiler construction and artificial intelligence.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>
</p><p>Nim's original website design by Dominik Picheta and Hugo Locurcio. Joseph Wecker created the Nim logo.
</p><p>Nim's initial development was started in 2005 by Andreas Rumpf. It was originally named Nimrod when the project was made public in 2008.<sup id="cite_ref-NimAction_21-0" class="reference"><a href="#cite_note-NimAction-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 4–11">: 4–11 </span></sup>
</p><p>The first version of the Nim <a href="Compiler" title="Compiler">compiler</a> was written in <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a> using the <a href="Free_Pascal" title="Free Pascal">Free Pascal</a> compiler.<sup id="cite_ref-pas-sources_22-0" class="reference"><a href="#cite_note-pas-sources-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> In 2008, a version of the compiler written in Nim was released.<sup id="cite_ref-news_23-0" class="reference"><a href="#cite_note-news-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> The compiler is <a href="Free_and_open-source_software" title="Free and open-source software">free and open-source software</a>, and is being developed by a community of volunteers working with Andreas Rumpf.<sup id="cite_ref-contributors_24-0" class="reference"><a href="#cite_note-contributors-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> The language was officially renamed from <i>Nimrod</i> to <i>Nim</i> with the release of version 0.10.2 in December 2014.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> On September 23, 2019, version 1.0 of Nim was released, signifying the maturing of the language and its toolchain. On August 1, 2023, version 2.0 of Nim was released, signifying the completion, stabilization of, and switch to the ARC/ORC memory model.<sup id="cite_ref-Nim_v2.0_released_26-0" class="reference"><a href="#cite_note-Nim_v2.0_released-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Language_design">Language design</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Syntax">Syntax</h3></div>
<p>The syntax of Nim resembles that of <a href="Python_(programming_language)" title="Python (programming language)">Python</a>.<sup id="cite_ref-Yegulalp_27-0" class="reference"><a href="#cite_note-Yegulalp-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> Code blocks and nesting statements are identified through use of <a href="Whitespace_character" title="Whitespace character">whitespace</a>, according to the <a href="Off-side_rule" title="Off-side rule">offside-rule</a>. Many <a href="Reserved_word" title="Reserved word">keywords</a> are identical to their Python equivalents, which are mostly English keywords, whereas other programming languages usually use punctuation. With the goal of improving upon its influence languages, even though Nim supports <a href="Indentation" class="mw-redirect" title="Indentation">indentation</a>-based syntax like Python, it introduced additional flexibility. For example, a single <a href="Statement_(computer_science)" title="Statement (computer science)">statement</a> may span multiple lines if a comma or <a href="Binary_operator" class="mw-redirect" title="Binary operator">binary operator</a> is at the end of each line. Nim also supports user-defined operators.
</p><p>Unlike Python, Nim implements (native) static typing. Nim's type system allows for easy <a href="Type_conversion" title="Type conversion">type conversion</a>, casting, and provides syntax for generic programming. Nim notably provides type classes which can stand in for multiple types, and provides several such type classes 'out of the box'. Type classes allow working with several types as if they were a single type. For example:
</p>
<ul><li><code>openarray</code> – Represents arrays of different sizes, sequences, and strings</li>
<li><code>SomeSignedInt</code> – Represents all the signed integer types</li>
<li><code>SomeInteger</code> – Represents all the Integer types, signed or not</li>
<li><code>SomeOrdinal</code> – Represents all the basic countable and ordered types, except of non integer number</li></ul>
<p>This code sample demonstrates the use of typeclasses in Nim:
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="c"># Let's declare a function that takes any type of number and displays its double</span>
<span class="c"># In Nim functions with side effect are called "proc"</span>
<span class="k">proc</span><span class="w"> </span><span class="nf">timesTwo</span><span class="p">(</span><span class="n">i</span><span class="p">:</span><span class="w"> </span><span class="n">SomeNumber</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="c"># Let's write another function that takes any ordinal type, and returns</span>
<span class="c"># the double of the input in its original type, if it is a number;</span>
<span class="c"># or returns the input itself otherwise.</span>
<span class="c"># We use a generic Type(T), and precise that it can only be an Ordinal</span>
<span class="k">func</span><span class="w"> </span><span class="nf">twiceIfIsNumber</span><span class="o">[</span><span class="n">T</span><span class="p">:</span><span class="w"> </span><span class="n">SomeOrdinal</span><span class="o">]</span><span class="p">(</span><span class="n">i</span><span class="p">:</span><span class="w"> </span><span class="n">T</span><span class="p">):</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="ow">is</span><span class="w"> </span><span class="n">SomeNumber</span><span class="p">:</span><span class="w"> </span><span class="c"># A `when` is an `if` evaluated during compile time</span>
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c"># You can also write `return i * 2`</span>
<span class="w"> </span><span class="k">else</span><span class="p">:</span>
<span class="w"> </span><span class="c"># If the Ordinal is not a number it is converted to int,</span>
<span class="w"> </span><span class="c"># multiplied by two, and reconverted to its based type</span>
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">.</span><span class="nb">int</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p">).</span><span class="n">T</span>
</pre></div>
<pre><code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">echo</span><span class="w"> </span><span class="n">twiceIfIsNumber</span><span class="p">(</span><span class="mi">67</span><span class="p">)</span><span class="w"> </span><span class="c"># Passes an int to the function</span></code>
echo twiceIfIsNumber<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="p">(</span><span class="mi">67</span><span class="err">u8) # Passes an uint8</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">echo</span><span class="w"> </span><span class="n">twiceIfIsNumber</span><span class="p">(</span><span class="kp">true</span><span class="p">)</span><span class="w"> </span><span class="c"># Passes a bool (Which is also an Ordinal)</span></code>
</pre>
<div class="mw-heading mw-heading3"><h3 id="Influence">Influence</h3></div>
<p>According to the language creator, Nim was conceived to combine the best parts of Ada typing system, <a href="Python_(programming_language)" title="Python (programming language)">Python</a> flexibility, and powerful <a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a> macro system.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup>
</p><p>Nim was influenced by specific characteristics of existing languages, including the following:
</p>
<ul><li><a href="Modula-3" title="Modula-3">Modula-3</a>: <a href="Modula-3#Dynamic_allocation" title="Modula-3">traced vs untraced</a> pointers</li>
<li><a href="Object_Pascal" title="Object Pascal">Object Pascal</a>: type safe bit sets (<i>set of char</i>), case statement syntax, various type names and filenames in the standard library</li>
<li><a href="Ada_(programming_language)" title="Ada (programming language)">Ada</a>: subrange types, distinct type, safe variants – case objects</li>
<li><a href="C%2B%2B" title="C++">C++</a>: <a href="Operator_overloading" title="Operator overloading">operator overloading</a>, <a href="Generic_programming" title="Generic programming">generic programming</a></li>
<li><a href="Python_(programming_language)" title="Python (programming language)">Python</a>: <a href="Off-side_rule" title="Off-side rule">Off-side rule</a></li>
<li><a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>: <a href="Metaprogramming" title="Metaprogramming">Macro system</a>, <a href="Abstract_syntax_tree" title="Abstract syntax tree">AST</a> manipulation, <a href="Homoiconicity" title="Homoiconicity">homoiconicity</a></li>
<li><a href="Oberon_(programming_language)" title="Oberon (programming language)">Oberon</a>: export marker</li>
<li><a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>: <a href="Async/await" title="Async/await">async/await</a>, lambda macros</li>
<li><a href="ParaSail_(programming_language)" title="ParaSail (programming language)">ParaSail</a>: pointer-free programming<sup id="cite_ref-parasail_8-1" class="reference"><a href="#cite_note-parasail-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Uniform_function_call_syntax">Uniform function call syntax</h3></div>
<p>Nim supports <a href="Uniform_function_call_syntax" title="Uniform function call syntax">uniform function call syntax</a> (UFCS)<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> and identifier equality, which provides a large degree of flexibility in use.
</p><p>For example, each of these lines print <a href="%22Hello%2C_World!%22_program" title="&quot;Hello, World!&quot; program">"hello world"</a>, just with different syntax:
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="n">echo</span><span class="w"> </span><span class="s">"hello world"</span>
<span class="n">echo</span><span class="p">(</span><span class="s">"hello world"</span><span class="p">)</span>
<span class="s">"hello world"</span><span class="p">.</span><span class="n">echo</span><span class="p">()</span>
<span class="s">"hello world"</span><span class="p">.</span><span class="n">echo</span>
<span class="n">echo</span><span class="p">(</span><span class="s">"hello"</span><span class="p">,</span><span class="w"> </span><span class="s">" world"</span><span class="p">)</span>
<span class="s">"hello"</span><span class="p">.</span><span class="n">echo</span><span class="p">(</span><span class="s">" world"</span><span class="p">)</span>
<span class="s">"hello"</span><span class="p">.</span><span class="n">echo</span><span class="w"> </span><span class="s">" world"</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Identifier_equality">Identifier equality</h3></div><p>
Nim is almost fully style-insensitive; two <a href="Identifier" title="Identifier">identifiers</a> are considered equal if they only differ by capitalization and underscores, as long as the first characters are identical. This is to enable a mixture of styles across libraries: one user can write a library using snake_case as a convention, and it can be used by a different user in a camelCase style without issue.<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup></p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">const</span><span class="w"> </span><span class="n">useHttps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">true</span>
<span class="n">assert</span><span class="w"> </span><span class="n">useHttps</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">useHttps</span>
<span class="n">assert</span><span class="w"> </span><span class="n">useHTTPS</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">useHttps</span>
<span class="n">assert</span><span class="w"> </span><span class="n">use_https</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">useHttps</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Stropping">Stropping</h3></div>
<p>The <a href="Stropping_(syntax)" title="Stropping (syntax)">stropping</a> feature allows the use of any name for variables or functions, even when the names are <a href="Reserved_word" title="Reserved word">reserved words</a> for keywords. An example of stropping is the ability to define a variable named <code>if</code>, without clashing with the keyword <code>if</code>. Nim's implementation of this is achieved via backticks, allowing any reserved word to be used as an identifier.<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">type</span><span class="w"> </span><span class="k">Type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
<span class="w"> </span><span class="p">`</span><span class="nb">int</span><span class="p">`:</span><span class="w"> </span><span class="nb">int</span>

<span class="k">let</span><span class="w"> </span><span class="p">`</span><span class="k">object</span><span class="p">`</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">Type</span><span class="p">(`</span><span class="nb">int</span><span class="p">`:</span><span class="w"> </span><span class="mi">9</span><span class="p">)</span>
<span class="n">assert</span><span class="w"> </span><span class="p">`</span><span class="k">object</span><span class="p">`</span><span class="w"> </span><span class="ow">is</span><span class="w"> </span><span class="k">Type</span>
<span class="n">assert</span><span class="w"> </span><span class="p">`</span><span class="k">object</span><span class="p">`.`</span><span class="nb">int</span><span class="p">`</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">9</span>

<span class="kd">var</span><span class="w"> </span><span class="p">`</span><span class="kd">var</span><span class="p">`</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span>
<span class="k">let</span><span class="w"> </span><span class="p">`</span><span class="k">let</span><span class="p">`</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span>
<span class="n">assert</span><span class="w"> </span><span class="p">`</span><span class="kd">var</span><span class="p">`</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">`</span><span class="k">let</span><span class="p">`</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">50</span>

<span class="k">const</span><span class="w"> </span><span class="p">`</span><span class="n">assert</span><span class="p">`</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">true</span>
<span class="n">assert</span><span class="w"> </span><span class="p">`</span><span class="n">assert</span><span class="p">`</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Compiler">Compiler</h2></div>
<p>The Nim compiler emits fast, optimized <a href="C_(programming_language)" title="C (programming language)">C</a> code by default. It defers compiling-to-object code to an external C compiler<sup id="cite_ref-infoq_32-0" class="reference"><a href="#cite_note-infoq-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> to leverage existing compiler optimization and portability. Many C compilers are supported, including <a href="Clang" title="Clang">Clang</a>, <a href="Microsoft_Visual_C%2B%2B" title="Microsoft Visual C++">Microsoft Visual C++</a> (MSVC), <a href="MinGW" title="MinGW">MinGW</a>, and <a href="GNU_Compiler_Collection" title="GNU Compiler Collection">GNU Compiler Collection</a> (GCC). The Nim compiler can also emit <a href="C%2B%2B" title="C++">C++</a>, <a href="Objective-C" title="Objective-C">Objective-C</a>, and <a href="JavaScript" title="JavaScript">JavaScript</a> code to allow easy interfacing with application programming interfaces (<a href="API" title="API">APIs</a>) written in those languages;<sup id="cite_ref-drdobbs_9-1" class="reference"><a href="#cite_note-drdobbs-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> developers can simply write in Nim, then compile to any supported language. This also allows writing applications for <a href="IOS" title="IOS">iOS</a> and <a href="Android_(operating_system)" title="Android (operating system)">Android</a>. There is also an unofficial <a href="LLVM" title="LLVM">LLVM</a> backend, allowing use of the Nim compiler in a stand-alone way.<sup id="cite_ref-:1_18-1" class="reference"><a href="#cite_note-:1-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>
</p><p>The Nim compiler is <a href="Self-hosting_(compilers)" title="Self-hosting (compilers)">self-hosting</a>, meaning it is written in the Nim language.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> The compiler supports cross-compiling, so it is able to compile software for any of the supported operating systems, no matter the development machine. This is useful for compiling applications for embedded systems, and for uncommon and obscure computer architectures.
</p>
<div class="mw-heading mw-heading3"><h3 id="Compiler_options">Compiler options</h3></div>
<p>By default, the Nim compiler creates a <i>debug</i> build.<sup id="cite_ref-build-mode_34-0" class="reference"><a href="#cite_note-build-mode-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
With the option <code>-d:release</code> a <i>release</i> build can be created, which is optimized for speed and contains fewer runtime checks.<sup id="cite_ref-build-mode_34-1" class="reference"><a href="#cite_note-build-mode-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
With the option <code>-d:danger</code> all runtime checks can be disabled, if maximum speed is desired.<sup id="cite_ref-build-mode_34-2" class="reference"><a href="#cite_note-build-mode-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Memory_management">Memory management</h3></div>
<p>Nim supports multiple memory management strategies, including the following:<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><code>--mm:arc</code> – Automatic <a href="Reference_counting" title="Reference counting">reference counting</a> (ARC) with <a href="Move_semantics" class="mw-redirect" title="Move semantics">move semantics</a> optimizations, offers a shared heap. It offers fully deterministic performance for hard realtime systems.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> Reference cycles may cause memory leaks: these may be dealt with by manually annotating <code>{.acyclic.}</code> pragmas or by using <code>--mm:orc</code>.</li>
<li><code>--mm:orc</code> – Same as <code>--mm:arc</code> but adds a cycle collector (the "O") based on "trial deletion".<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup> The cycle collector only analyzes types if they are potentially cyclic.</li>
<li><code>--mm:refc</code> – Standard deferred <a href="Reference_counting" title="Reference counting">reference counting</a> based <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a> with a simple mark-and-sweep backup GC in order to collect cycles. Heaps are thread-local.</li>
<li><code>--mm:markAndSweep</code> – Simple <a href="Mark_and_sweep" class="mw-redirect" title="Mark and sweep">mark-and-sweep</a> based <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a>. Heaps are thread-local.</li>
<li><code>--mm:boehm</code> – <a href="Boehm_garbage_collector" title="Boehm garbage collector">Boehm</a> based <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a>, it offers a shared heap.</li>
<li><code>--mm:go</code> – <a href="Go_(programming_language)" title="Go (programming language)">Go</a>'s <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a>, useful for interoperability with <a href="Go_(programming_language)" title="Go (programming language)">Go</a>. Offers a shared heap.</li>
<li><code>--mm:none</code> – No memory management strategy nor a <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a>. Allocated memory is simply never freed, unless manually freed by the developer's code.</li></ul>
<p>As of Nim 2.0, ORC is the default GC.<sup id="cite_ref-Nim_v2.0_released_26-1" class="reference"><a href="#cite_note-Nim_v2.0_released-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Development_tools">Development tools</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Bundled">Bundled</h3></div>
<p>Many tools are bundled with the Nim install package, including:
</p>
<div class="mw-heading mw-heading4"><h4 id="Nimble">Nimble</h4></div>
<p>Nimble is the standard <a href="Package_manager" title="Package manager">package manager</a> used by Nim to package Nim modules.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> It was initially developed by Dominik Picheta, who is also a core Nim developer. Nimble has been included as Nim's official package manager since Oct 27, 2015, the v0.12.0 release.<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>
</p><p>Nimble packages are defined by <code>.nimble</code> files, which contain information about the package version, author, license, description, dependencies, and more.<sup id="cite_ref-NimAction_21-1" class="reference"><a href="#cite_note-NimAction-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 132">: 132 </span></sup> These files support a limited subset of the Nim syntax called NimScript, with the main limitation being the access to the FFI. These scripts allow changing of test procedure, or for custom tasks to be written.
</p><p>The list of packages is stored in a JavaScript Object Notation (<a href="JSON" title="JSON">JSON</a>) file which is freely accessible in the nim-lang/packages repository on GitHub. This JSON file provides Nimble with a mapping between the names of packages and their Git or Mercurial repository URLs.
</p><p>Nimble comes with the Nim compiler. Thus, it is possible to test the Nimble environment by running:
<code>nimble -v</code>.
This command will reveal the version number, compiling date and time, and <a href="Git" title="Git">Git</a> hash of nimble. Nimble uses the Git package, which must be available for Nimble to function properly. The Nimble command-line is used as an interface for installing, removing (uninstalling), and upgrading–patching module packages.<sup id="cite_ref-NimAction_21-2" class="reference"><a href="#cite_note-NimAction-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 130–131">: 130–131 </span></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="c2nim">c2nim</h4></div>
<p>c2nim is a <a href="Source-to-source_compiler" title="Source-to-source compiler">source-to-source compiler</a> (transcompiler or transpiler) meant to be used on <a href="ANSI_C" title="ANSI C">C</a>/<a href="C%2B%2B" title="C++">C++</a> headers to help generate new Nim bindings.<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> The output is human-readable Nim code that is meant to be edited by hand after the translation process.
</p>
<div class="mw-heading mw-heading4"><h4 id="koch">koch</h4></div>
<p>koch is a maintenance script that is used to build Nim, and provide HTML documentation.<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="nimgrep">nimgrep</h4></div>
<p>nimgrep is a generic tool for manipulating text. It is used to search for regex, peg patterns, and contents of directories, and it can be used to replace tasks. It is included to assist with searching Nim's style-insensitive identifiers.<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="nimsuggest">nimsuggest</h4></div>
<p>nimsuggest is a tool that helps any source code editor query a <code>.nim</code> source file to obtain useful information like definition of symbols or suggestions for completions.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="niminst">niminst</h4></div>
<p>niminst is a tool to generate an installer for a Nim program.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup>
It creates .msi installers for Windows via Inno Setup, and install and uninstall scripts for <a href="Linux" title="Linux">Linux</a>, <a href="MacOS" title="MacOS">macOS</a>, and <a href="Berkeley_Software_Distribution" title="Berkeley Software Distribution">Berkeley Software Distribution</a> (BSD).
</p>
<div class="mw-heading mw-heading4"><h4 id="nimpretty">nimpretty</h4></div>
<p>nimpretty is a source code beautifier, used to format code according to the official Nim style guide.<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Testament">Testament</h4></div>
<p><a rel="nofollow" class="external text" href="https://nim-lang.github.io/Nim/testament.html">Testament</a> is an advanced automatic unit tests runner for Nim tests. Used in developing Nim, it offers process isolation tests, generates statistics about test cases, supports multiple targets and simulated Dry-Runs, has logging, can generate HTML reports, can skip tests from a file, and more.
</p>
<div class="mw-heading mw-heading3"><h3 id="Other_notable_tools">Other notable tools</h3></div>
<p>Some notable tools not included in the Nim distribution include:
</p>
<div class="mw-heading mw-heading4"><h4 id="choosenim">choosenim</h4></div>
<p><a rel="nofollow" class="external text" href="https://github.com/dom96/choosenim">choosenim</a> was developed by Dominik Picheta, creator of the Nimble package manager, as a tool to enable installing and using multiple versions of the Nim compiler. It downloads any Nim stable or development compiler version from the command line, enabling easy switching between them.<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="nimpy">nimpy</h4></div>
<p><a rel="nofollow" class="external text" href="https://github.com/yglukhov/nimpy">nimpy</a> is a library that enables convenient Python integration in Nim programs.<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="pixie">pixie</h4></div>
<p><a rel="nofollow" class="external text" href="https://github.com/treeform/pixie">pixie</a> is a feature-rich 2D graphics library, similar to <a href="Cairo_(graphics)" title="Cairo (graphics)">Cairo</a> or the <a href="Skia_Graphics_Engine" title="Skia Graphics Engine">Skia</a>. It uses <a href="Single_instruction%2C_multiple_data" title="Single instruction, multiple data">SIMD</a> acceleration to speed-up image manipulation drastically. It supports many image formats, blending, masking, blurring, and can be combined with the <a rel="nofollow" class="external text" href="https://github.com/treeform/boxy">boxy</a> library to do hardware accelerated rendering.
</p>
<div class="mw-heading mw-heading4"><h4 id="nimterop">nimterop</h4></div>
<p><a rel="nofollow" class="external text" href="https://github.com/nimterop/nimterop">nimterop</a> is a tool focused on automating the creation of C/C++ wrappers needed for Nim's foreign function interface.<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Libraries">Libraries</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Pure/impure_libraries">Pure/impure libraries</h3></div>
<p>Pure libraries are modules written in Nim only. They include no wrappers to access libraries written in other programming languages.
</p><p>Impure libraries are modules of Nim code which depend on external libraries that are written in other programming languages such as C.
</p>
<div class="mw-heading mw-heading3"><h3 id="Standard_library">Standard library</h3></div>
<p>The Nim standard library includes modules for all basic tasks, including:<sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>System and core modules</li>
<li>Collections and algorithms</li>
<li>String handling</li>
<li>Time handling</li>
<li>Generic Operating System Services</li>
<li>Math libraries</li>
<li>Internet Protocols and Support</li>
<li>Threading</li>
<li>Parsers</li>
<li>Docutils</li>
<li>XML Processing</li>
<li>XML and HTML code generator</li>
<li>Hashing</li>
<li>Database support (PostgreSQL, MySQL and SQLite)</li>
<li>Wrappers (Win32 API, POSIX)</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Use_of_other_libraries">Use of other libraries</h3></div>
<p>A Nim program can use any <a href="Library_(computing)" title="Library (computing)">library</a> which can be used in a C, C++, or JavaScript program. <a href="Language_binding" title="Language binding">Language bindings</a> exist for many libraries, including <a href="GTK" title="GTK">GTK</a>,<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup> <a href="Qt_(software)" title="Qt (software)">Qt</a> QML,<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> <a href="WxWidgets" title="WxWidgets">wxWidgets</a>,<sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup> <a href="Simple_DirectMedia_Layer" title="Simple DirectMedia Layer">SDL 2</a>,<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup> <a href="Raylib" title="Raylib">Raylib</a>,<sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup> <a href="Godot_(game_engine)" title="Godot (game engine)">Godot</a>,<sup id="cite_ref-57" class="reference"><a href="#cite_note-57"><span class="cite-bracket">[</span>57<span class="cite-bracket">]</span></a></sup> <a href="UE5" class="mw-redirect" title="UE5">UE5</a>,<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span class="cite-bracket">[</span>58<span class="cite-bracket">]</span></a></sup> <a href="Cairo_(graphics)" title="Cairo (graphics)">Cairo</a>,<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup> <a href="OpenGL" title="OpenGL">OpenGL</a>,<sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup> <a href="Vulkan" title="Vulkan">Vulkan</a>,<sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup> <a href="Windows_API" title="Windows API">WinAPI</a>,<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">[</span>62<span class="cite-bracket">]</span></a></sup> <a href="Zlib" title="Zlib">zlib</a>, <a href="Libzip" title="Libzip">libzip</a>, <a href="OpenSSL" title="OpenSSL">OpenSSL</a> and <a href="CURL" title="CURL">cURL</a>.<sup id="cite_ref-lib_63-0" class="reference"><a href="#cite_note-lib-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup> Nim works with <a href="PostgreSQL" title="PostgreSQL">PostgreSQL</a>, <a href="MySQL" title="MySQL">MySQL</a>, and <a href="SQLite" title="SQLite">SQLite</a> databases.
</p><p>There are open source tools of various degree of support that can be used to interface Nim with <a href="Lua_(programming_language)" class="mw-redirect" title="Lua (programming language)">Lua</a>,<sup id="cite_ref-64" class="reference"><a href="#cite_note-64"><span class="cite-bracket">[</span>64<span class="cite-bracket">]</span></a></sup> <a href="Julia_(programming_language)" title="Julia (programming language)">Julia</a>,<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">[</span>65<span class="cite-bracket">]</span></a></sup> <a href="Rust_(programming_language)" title="Rust (programming language)">Rust</a>,<sup id="cite_ref-66" class="reference"><a href="#cite_note-66"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup>
<a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>,<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span class="cite-bracket">[</span>67<span class="cite-bracket">]</span></a></sup>
and <a href="Python_(programming_language)" title="Python (programming language)">Python</a><sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup> programming languages or transpile Nim to <a href="TypeScript" title="TypeScript">TypeScript</a>.<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">[</span>69<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Hello_world">Hello world</h3></div>
<p>The <a href="%22Hello%2C_World!%22_program" title="&quot;Hello, World!&quot; program">"Hello, World!" program</a> in Nim:
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="n">echo</span><span class="p">(</span><span class="s">"Hello, World!"</span><span class="p">)</span>
<span class="c"># Procedures can be called with no parentheses</span>
<span class="n">echo</span><span class="w"> </span><span class="s">"Hello, World!"</span>
</pre></div>
<p>Another version of "Hello World" can be accomplished by calling the <code>write</code> function with the <code>stdout</code> stream:
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="n">stdout</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="s">"Hello, World!</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="n">write</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span><span class="w"> </span><span class="s">"Hello, World!</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Fibonacci">Fibonacci</h3></div><p>
Several implementations of the <a href="Fibonacci_function" class="mw-redirect" title="Fibonacci function">Fibonacci function</a>, showcasing implicit returns, default parameters, iterators, recursion, and while loops:</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">proc</span><span class="w"> </span><span class="nf">fib</span><span class="p">(</span><span class="n">n</span><span class="p">:</span><span class="w"> </span><span class="n">Natural</span><span class="p">):</span><span class="w"> </span><span class="n">Natural</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">2</span><span class="p">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">n</span>
<span class="w"> </span><span class="k">else</span><span class="p">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">fib</span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">fib</span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span>
<span class="k">func</span><span class="w"> </span><span class="nf">fib2</span><span class="p">(</span><span class="n">n</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">):</span><span class="w"> </span><span class="nb">int</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="k">else</span><span class="p">:</span><span class="w"> </span><span class="n">fib2</span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="o">+</span><span class="n">b</span><span class="p">)</span>
<span class="w"> </span>
<span class="k">iterator</span><span class="w"> </span><span class="n">fib3</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="kp">true</span><span class="p">:</span>
<span class="w"> </span><span class="k">yield</span><span class="w"> </span><span class="n">a</span>
<span class="w"> </span><span class="n">swap</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">a</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Factorial">Factorial</h3></div><p>
Program to calculate the <a href="Factorial" title="Factorial">factorial</a> of a positive integer using the iterative approach, showcasing try/catch error handling and for loops:</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">strutils</span>

<span class="kd">var</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="w"> </span><span class="n">stdout</span><span class="p">.</span><span class="n">write</span><span class="w"> </span><span class="s">"Input positive integer number: "</span>
<span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">stdin</span><span class="p">.</span><span class="n">readline</span><span class="p">.</span><span class="n">parseInt</span>
<span class="k">except</span><span class="w"> </span><span class="n">ValueError</span><span class="p">:</span>
<span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="n">newException</span><span class="p">(</span><span class="n">ValueError</span><span class="p">,</span><span class="w"> </span><span class="s">"You must enter a positive number"</span><span class="p">)</span>

<span class="kd">var</span><span class="w"> </span><span class="n">fact</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
<span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mf">2</span><span class="p">..</span><span class="n">n</span><span class="p">:</span>
<span class="w"> </span><span class="n">fact</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fact</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">i</span>

<span class="n">echo</span><span class="w"> </span><span class="n">fact</span>
</pre></div><p>Using the module math from Nim's standard library:</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">math</span>
<span class="n">echo</span><span class="w"> </span><span class="n">fac</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Reversing_a_string">Reversing a string</h3></div>
<p>A simple demonstration showing the implicit result variable and the use of iterators.
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">proc</span><span class="w"> </span><span class="nf">reverse</span><span class="p">(</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">):</span><span class="w"> </span><span class="nb">string</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">countdown</span><span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">high</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">):</span>
<span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">add</span><span class="w"> </span><span class="n">s</span><span class="o">[</span><span class="n">i</span><span class="o">]</span>

<span class="k">let</span><span class="w"> </span><span class="n">str1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Reverse This!"</span>
<span class="n">echo</span><span class="w"> </span><span class="s">"Reversed: "</span><span class="p">,</span><span class="w"> </span><span class="n">reverse</span><span class="p">(</span><span class="n">str1</span><span class="p">)</span>
</pre></div>
<p>One of Nim's more exotic features is the implicit <code>result</code> variable. Every procedure in Nim with a non-void return type has an implicit result variable that represents the value to be returned. In the for loop we see an invocation of <code>countdown</code> which is an iterator. If an iterator is omitted, the compiler will attempt to use an <code>items</code> iterator, if one is defined for the type specified.
</p>
<div class="mw-heading mw-heading3"><h3 id="Graphical_user_interface">Graphical user interface</h3></div>
<p>Using <a href="GTK" title="GTK">GTK 3</a> with GObject introspection through the <a rel="nofollow" class="external text" href="https://github.com/StefanSalewski/gintro">gintro</a> module:
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">gintro</span><span class="o">/[</span><span class="n">gtk</span><span class="p">,</span><span class="w"> </span><span class="n">glib</span><span class="p">,</span><span class="w"> </span><span class="n">gobject</span><span class="p">,</span><span class="w"> </span><span class="n">gio</span><span class="o">]</span>

<span class="k">proc</span><span class="w"> </span><span class="nf">appActivate</span><span class="p">(</span><span class="n">app</span><span class="p">:</span><span class="w"> </span><span class="n">Application</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">window</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newApplicationWindow</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
<span class="w"> </span><span class="n">window</span><span class="p">.</span><span class="n">title</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"GTK3 application with gobject introspection"</span>
<span class="w"> </span><span class="n">window</span><span class="p">.</span><span class="n">defaultSize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="mi">400</span><span class="p">,</span><span class="w"> </span><span class="mi">400</span><span class="p">)</span>
<span class="w"> </span><span class="n">showAll</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>

<span class="k">proc</span><span class="w"> </span><span class="nf">main</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">app</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newApplication</span><span class="p">(</span><span class="s">"org.gtk.example"</span><span class="p">)</span>
<span class="w"> </span><span class="n">connect</span><span class="p">(</span><span class="n">app</span><span class="p">,</span><span class="w"> </span><span class="s">"activate"</span><span class="p">,</span><span class="w"> </span><span class="n">appActivate</span><span class="p">)</span>
<span class="w"> </span><span class="k">discard</span><span class="w"> </span><span class="n">run</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>

<span class="n">main</span><span class="p">()</span>
</pre></div><p>This code requires the gintro module to work, which is not part of the standard library. To install the module gintro and many others you can use the tool nimble, which comes as part of Nim. To install the gintro module with nimble you do the following:
</p><pre>nimble install gintro
</pre>
<div class="mw-heading mw-heading2"><h2 id="Programming_paradigms">Programming paradigms</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Functional_programming">Functional programming</h3></div>
<p><a href="Functional_programming" title="Functional programming">Functional programming</a> is supported in Nim through <a href="First-class_function" title="First-class function">first-class functions</a> and code without <a href="Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a> via the <code>noSideEffect</code> pragma or the <code>func</code> keyword.<sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span class="cite-bracket">[</span>70<span class="cite-bracket">]</span></a></sup> Nim will perform <a href="Side_effect_(computer_science)" title="Side effect (computer science)">side effect</a> analysis and raise compiling errors for code that does not obey the contract of producing no <a href="Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a> when compiled with the experimental feature <code>strictFuncs</code>, planned to become the default in later versions.<sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span class="cite-bracket">[</span>71<span class="cite-bracket">]</span></a></sup>
</p><p>Contrary to purely <a href="Functional_programming" title="Functional programming">functional programming</a> languages, Nim is a <a href="Programming_paradigm#Support_for_multiple_paradigms" title="Programming paradigm">multi-paradigm</a> programming language, so <a href="Functional_programming" title="Functional programming">functional programming</a> restrictions are opt-in on a function-by-function basis.
</p>
<div class="mw-heading mw-heading4"><h4 id="First-class_functions">First-class functions</h4></div><p>
Nim supports <a href="First-class_function" title="First-class function">first-class functions</a> by allowing functions to be stored in variables or passed anonymously as parameters to be invoked by other functions.<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span class="cite-bracket">[</span>72<span class="cite-bracket">]</span></a></sup> The <code>std/sugar</code> module provides syntactic sugar for anonymous functions in type declarations and instantiation.</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/[</span><span class="n">sequtils</span><span class="p">,</span><span class="w"> </span><span class="n">sugar</span><span class="o">]</span>

<span class="k">let</span><span class="w"> </span><span class="n">powersOfTwo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span><span class="w"> </span><span class="mi">32</span><span class="p">,</span><span class="w"> </span><span class="mi">64</span><span class="p">,</span><span class="w"> </span><span class="mi">128</span><span class="p">,</span><span class="w"> </span><span class="mi">256</span><span class="o">]</span>

<span class="k">proc</span><span class="w"> </span><span class="nf">filter</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">(</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="n">openArray</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">pred</span><span class="p">:</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="nb">bool</span><span class="p">):</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newSeq</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">()</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="o">&lt;</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">len</span><span class="p">:</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">pred</span><span class="p">(</span><span class="n">s</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">):</span>
<span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">s</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">)</span>

<span class="n">echo</span><span class="w"> </span><span class="n">powersOfTwo</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">proc</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="p">):</span><span class="w"> </span><span class="nb">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">32</span><span class="p">)</span>
<span class="c"># syntactic sugar for the above, provided as a macro from std/sugar</span>
<span class="n">echo</span><span class="w"> </span><span class="n">powersOfTwo</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">32</span><span class="p">)</span>

<span class="k">proc</span><span class="w"> </span><span class="nf">greaterThan32</span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="p">):</span><span class="w"> </span><span class="nb">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">32</span>
<span class="n">echo</span><span class="w"> </span><span class="n">powersOfTwo</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">greaterThan32</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Side_effects">Side effects</h4></div>
<p>Side effects of functions annotated with the <code>noSideEffect</code> pragma are checked, and the compiler will refuse to compile functions failing to meet those. Side effects in Nim include mutation, global state access or modification, asynchronous code, threaded code, and IO. Mutation of parameters may occur for functions taking parameters of <code>var</code> or <code>ref</code> type: this is expected to fail to compile with the currently-experimental <code>strictFuncs</code> in the future.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">[</span>73<span class="cite-bracket">]</span></a></sup> The <code>func</code> keyword introduces a shortcut for a <code>noSideEffect</code> pragma.<sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span class="cite-bracket">[</span>74<span class="cite-bracket">]</span></a></sup>
</p>
<style data-mw-deduplicate="TemplateStyles:r1195917819">
/* start https://en.wikipedia.org/ */


.mw-parser-output .pre-borderless{border:none}


/* end https://en.wikipedia.org/ */
</style><pre class="pre"><code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="k">func</span><span class="w"> </span><span class="nf">binarySearch</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">(</span><span class="n">a</span><span class="p">:</span><span class="w"> </span><span class="n">openArray</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">:</span><span class="w"> </span><span class="n">T</span><span class="p">):</span><span class="w"> </span><span class="nb">int</span></code>
# is short for...
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="k">proc</span><span class="w"> </span><span class="nf">binarySearch</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">(</span><span class="n">a</span><span class="p">:</span><span class="w"> </span><span class="n">openArray</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">:</span><span class="w"> </span><span class="n">T</span><span class="p">):</span><span class="w"> </span><span class="nb">int</span></code> {.noSideEffect.}

{.experimental: "strictFuncs".}

<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="k">type</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">Node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">le</span><span class="p">,</span><span class="w"> </span><span class="n">ri</span><span class="p">:</span><span class="w"> </span><span class="n">Node</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">data</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span></code>

<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="k">func</span><span class="w"> </span><span class="nf">len</span><span class="p">(</span><span class="n">n</span><span class="p">:</span><span class="w"> </span><span class="n">Node</span><span class="p">):</span><span class="w"> </span><span class="nb">int</span><span class="w"> </span><span class="o">=</span></code>
# valid: len does not have side effects
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="kd">var</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="k">while</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kp">nil</span><span class="p">:</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">inc</span><span class="w"> </span><span class="n">result</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">it</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">it</span><span class="p">.</span><span class="n">ri</span></code>

<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="k">func</span><span class="w"> </span><span class="nf">mut</span><span class="p">(</span><span class="n">n</span><span class="p">:</span><span class="w"> </span><span class="n">Node</span><span class="p">)</span><span class="w"> </span><span class="o">=</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="k">let</span><span class="w"> </span><span class="n">m</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="c"># is the statement that connected the mutation to the parameter</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="n">m</span><span class="p">.</span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"yeah"</span><span class="w"> </span><span class="c"># the mutation is here</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="c"># Error: 'mut' can have side effects</span></code>
<code class="mw-highlight mw-highlight-lang-nim mw-content-ltr" style="background:none; border:none; color:inherit; padding: 0px 0px;" dir="ltr"><span class="c"># an object reachable from 'n' is potentially mutated</span></code></pre>
<div class="mw-heading mw-heading4"><h4 id="Function_composition">Function composition</h4></div>
<p><a href="Uniform_function_call_syntax" title="Uniform function call syntax">Uniform function call syntax</a> allows the <a href="Function_composition_(computer_science)" title="Function composition (computer science)">chaining of arbitrary functions</a>, perhaps best exemplified with the <code>std/sequtils</code> library.<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span class="cite-bracket">[</span>75<span class="cite-bracket">]</span></a></sup></p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/[</span><span class="n">sequtils</span><span class="p">,</span><span class="w"> </span><span class="n">sugar</span><span class="o">]</span>

<span class="k">let</span><span class="w"> </span><span class="n">numbers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="o">]</span>
<span class="c"># a and b are special identifiers in the foldr macro</span>
<span class="n">echo</span><span class="w"> </span><span class="n">numbers</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">3</span><span class="p">).</span><span class="n">deduplicate</span><span class="p">.</span><span class="n">foldr</span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="c"># 30</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Algebraic_data_types_and_pattern_matching">Algebraic data types and pattern matching</h4></div><p>
Nim has support for <a href="Product_type" title="Product type">product types</a> via the <code>object</code> type, and for <a href="Sum_type" class="mw-redirect" title="Sum type">sum types</a> via <a href="Variant_type" class="mw-redirect" title="Variant type">object variants</a>: raw representations of <a href="Tagged_union" title="Tagged union">tagged unions</a>, with an enumerated type tag that must be <a href="Pattern_matching" title="Pattern matching">safely matched upon</a> before fields of variants can be accessed.<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span class="cite-bracket">[</span>76<span class="cite-bracket">]</span></a></sup> These types can be <a href="Algebraic_data_type" title="Algebraic data type">composed algebraically</a>. <a href="Structural_pattern_matching" class="mw-redirect" title="Structural pattern matching">Structural pattern matching</a> is available, but relegated to macros in various third-party libraries.<sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span class="cite-bracket">[</span>77<span class="cite-bracket">]</span></a></sup></p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">tables</span>

<span class="k">type</span>
<span class="w"> </span><span class="n">Value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uint64</span>
<span class="w"> </span><span class="n">Ident</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">string</span>
<span class="w"> </span><span class="n">ExprKind</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">enum</span>
<span class="w"> </span><span class="n">Literal</span><span class="p">,</span><span class="w"> </span><span class="n">Variable</span><span class="p">,</span><span class="w"> </span><span class="n">Abstraction</span><span class="p">,</span><span class="w"> </span><span class="n">Application</span>
<span class="w"> </span><span class="n">Expr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">kind</span><span class="p">:</span><span class="w"> </span><span class="n">ExprKind</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Literal</span><span class="o">:</span>
<span class="w"> </span><span class="n">litIdent</span><span class="p">:</span><span class="w"> </span><span class="n">Value</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Variable</span><span class="o">:</span>
<span class="w"> </span><span class="n">varIdent</span><span class="p">:</span><span class="w"> </span><span class="n">Ident</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Abstraction</span><span class="o">:</span>
<span class="w"> </span><span class="n">paramAbs</span><span class="p">:</span><span class="w"> </span><span class="n">Ident</span>
<span class="w"> </span><span class="n">funcAbs</span><span class="p">:</span><span class="w"> </span><span class="n">Expr</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Application</span><span class="o">:</span>
<span class="w"> </span><span class="n">funcApp</span><span class="p">,</span><span class="w"> </span><span class="n">argApp</span><span class="p">:</span><span class="w"> </span><span class="n">Expr</span>

<span class="k">func</span><span class="w"> </span><span class="nf">eval</span><span class="p">(</span><span class="n">expr</span><span class="p">:</span><span class="w"> </span><span class="n">Expr</span><span class="p">,</span><span class="w"> </span><span class="n">context</span><span class="p">:</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">Table</span><span class="o">[</span><span class="n">Ident</span><span class="p">,</span><span class="w"> </span><span class="n">Value</span><span class="o">]</span><span class="p">):</span><span class="w"> </span><span class="n">Value</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">expr</span><span class="p">.</span><span class="n">kind</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Literal</span><span class="o">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">expr</span><span class="p">.</span><span class="n">litIdent</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Variable</span><span class="o">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">context</span><span class="o">[</span><span class="n">expr</span><span class="p">.</span><span class="n">varIdent</span><span class="o">]</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Application</span><span class="o">:</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">expr</span><span class="p">.</span><span class="n">funcApp</span><span class="p">.</span><span class="n">kind</span>
<span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nl">Abstraction</span><span class="o">:</span>
<span class="w"> </span><span class="n">context</span><span class="o">[</span><span class="n">expr</span><span class="p">.</span><span class="n">funcApp</span><span class="p">.</span><span class="n">paramAbs</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">expr</span><span class="p">.</span><span class="n">argApp</span><span class="p">.</span><span class="n">eval</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">expr</span><span class="p">.</span><span class="n">funcAbs</span><span class="p">.</span><span class="n">eval</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span><span class="p">:</span>
<span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="n">newException</span><span class="p">(</span><span class="n">ValueError</span><span class="p">,</span><span class="w"> </span><span class="s">"Invalid expression!"</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span><span class="p">:</span>
<span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="n">newException</span><span class="p">(</span><span class="n">ValueError</span><span class="p">,</span><span class="w"> </span><span class="s">"Invalid expression!"</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Object-oriented_programming">Object-oriented programming</h3></div>
<p>Despite being primarily an imperative and functional language, Nim supports various features for enabling object-oriented paradigms.<sup id="cite_ref-78" class="reference"><a href="#cite_note-78"><span class="cite-bracket">[</span>78<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:0_79-0" class="reference"><a href="#cite_note-:0-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Subtyping_and_inheritance">Subtyping and inheritance</h4></div><p>
Nim supports limited inheritance by use of <code>ref objects</code> and the <code>of</code> keyword.<sup id="cite_ref-:0_79-1" class="reference"><a href="#cite_note-:0-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup> To enable inheritance, any initial ("root") object must inherit from <code>RootObj</code>. Inheritance is of limited use within idiomatic Nim code: with the notable exception of Exceptions.<sup id="cite_ref-80" class="reference"><a href="#cite_note-80"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup></p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">type</span><span class="w"> </span><span class="n">Animal</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">RootObj</span>
<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span>
<span class="w"> </span><span class="n">age</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>
<span class="k">type</span><span class="w"> </span><span class="n">Dog</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">Animal</span>
<span class="k">type</span><span class="w"> </span><span class="n">Cat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">Animal</span>

<span class="kd">var</span><span class="w"> </span><span class="n">animals</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">Animal</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[]</span>
<span class="n">animals</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">Dog</span><span class="p">(</span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s">"Sparky"</span><span class="p">,</span><span class="w"> </span><span class="n">age</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">))</span>
<span class="n">animals</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">Cat</span><span class="p">(</span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s">"Mitten"</span><span class="p">,</span><span class="w"> </span><span class="n">age</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">))</span>

<span class="k">for</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">animals</span><span class="p">:</span>
<span class="w"> </span><span class="n">assert</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">Animal</span>
</pre></div><p>Subtyping relations can also be queried with the <code>of</code> keyword.<sup id="cite_ref-:0_79-2" class="reference"><a href="#cite_note-:0-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup>
</p><div class="mw-heading mw-heading4"><h4 id="Method_calls_and_encapsulation">Method calls and encapsulation</h4></div>
<p>Nim's <a href="Uniform_function_call_syntax" title="Uniform function call syntax">uniform function call syntax</a> enables calling ordinary functions with syntax similar to method call invocations in other programming languages. This is functional for "getters": and Nim also provides syntax for the creation of such "setters" as well. Objects may be made public on a per-field basis, providing for encapsulation.
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">type</span><span class="w"> </span><span class="n">Socket</span><span class="o">*</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span>
<span class="w"> </span><span class="n">host</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="w"> </span><span class="c"># private, lacks export marker</span>

<span class="c"># getter of host address</span>
<span class="k">proc</span><span class="w"> </span><span class="nf">host</span><span class="o">*</span><span class="p">(</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="n">Socket</span><span class="p">):</span><span class="w"> </span><span class="nb">int</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">host</span>

<span class="c"># setter of host address</span>
<span class="k">proc</span><span class="w"> </span><span class="nf">`host=`</span><span class="o">*</span><span class="p">(</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">Socket</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">host</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">value</span>

<span class="kd">var</span><span class="w"> </span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="n">Socket</span>
<span class="n">new</span><span class="w"> </span><span class="n">s</span>
<span class="n">assert</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">host</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="c"># same as host(s), s.host()</span>
<span class="n">s</span><span class="p">.</span><span class="n">host</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">34</span><span class="w"> </span><span class="c"># same as `host=`(s, 34)</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Dynamic_dispatch">Dynamic dispatch</h4></div>
<p><a href="Static_dispatch" title="Static dispatch">Static dispatch</a> is preferred, more performant, and standard even among method-looking routines.<sup id="cite_ref-:0_79-3" class="reference"><a href="#cite_note-:0-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup> Nonetheless, if dynamic dispatch is so desired, Nim provides the <code>method</code> keyword for enabling <a href="Dynamic_dispatch" title="Dynamic dispatch">dynamic dispatch</a> on reference types.</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">strformat</span>

<span class="k">type</span>
<span class="w"> </span><span class="n">Person</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">RootObj</span>
<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span>
<span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">Person</span>
<span class="w"> </span><span class="n">Teacher</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">Person</span>

<span class="k">method</span><span class="w"> </span><span class="nf">introduce</span><span class="p">(</span><span class="n">a</span><span class="p">:</span><span class="w"> </span><span class="n">Person</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="n">newException</span><span class="p">(</span><span class="n">CatchableError</span><span class="p">,</span><span class="w"> </span><span class="s">"Method without implementation override"</span><span class="p">)</span>

<span class="k">method</span><span class="w"> </span><span class="nf">introduce</span><span class="p">(</span><span class="n">a</span><span class="p">:</span><span class="w"> </span><span class="n">Student</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="o">&amp;</span><span class="s">"I am a student named {a.name}!"</span>

<span class="k">method</span><span class="w"> </span><span class="nf">introduce</span><span class="p">(</span><span class="n">a</span><span class="p">:</span><span class="w"> </span><span class="n">Teacher</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="o">&amp;</span><span class="s">"I am a teacher named {a.name}!"</span>
<span class="w"> </span>
<span class="k">let</span><span class="w"> </span><span class="n">people</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">Person</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[</span><span class="n">Teacher</span><span class="p">(</span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s">"Alice"</span><span class="p">),</span><span class="w"> </span><span class="n">Student</span><span class="p">(</span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s">"Bob"</span><span class="p">)</span><span class="o">]</span>
<span class="k">for</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">people</span><span class="p">:</span>
<span class="w"> </span><span class="n">person</span><span class="p">.</span><span class="n">introduce</span><span class="p">()</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Metaprogramming">Metaprogramming</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Templates">Templates</h4></div>
<p>Nim supports simple substitution on the abstract syntax tree via its templates.
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">template</span><span class="w"> </span><span class="nf">genType</span><span class="p">(</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">fieldname</span><span class="p">:</span><span class="w"> </span><span class="n">untyped</span><span class="p">,</span><span class="w"> </span><span class="n">fieldtype</span><span class="p">:</span><span class="w"> </span><span class="n">typedesc</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">type</span>
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
<span class="w"> </span><span class="n">fieldname</span><span class="p">:</span><span class="w"> </span><span class="n">fieldtype</span>

<span class="n">genType</span><span class="p">(</span><span class="n">Test</span><span class="p">,</span><span class="w"> </span><span class="n">foo</span><span class="p">,</span><span class="w"> </span><span class="nb">int</span><span class="p">)</span>

<span class="kd">var</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Test</span><span class="p">(</span><span class="n">foo</span><span class="p">:</span><span class="w"> </span><span class="mi">4566</span><span class="p">)</span>
<span class="n">echo</span><span class="p">(</span><span class="n">x</span><span class="p">.</span><span class="n">foo</span><span class="p">)</span><span class="w"> </span><span class="c"># 4566</span>
</pre></div>
<p>The <code>genType</code> is invoked at compile-time and a <code>Test</code> type is created.
</p>
<div class="mw-heading mw-heading4"><h4 id="Generics">Generics</h4></div>
<p>Nim supports both constrained and unconstrained generic programming.
Generics may be used in procedures, templates and macros. Unconstrained generic identifiers (<code>T</code> in this example) are defined after the routine's name in square brackets. Constrained generics can be placed on generic identifiers, or directly on parameters.
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">proc</span><span class="w"> </span><span class="nf">addThese</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">:</span><span class="w"> </span><span class="n">T</span><span class="p">):</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span>
<span class="n">echo</span><span class="w"> </span><span class="n">addThese</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="c"># 3 (of int type)</span>
<span class="n">echo</span><span class="w"> </span><span class="n">addThese</span><span class="p">(</span><span class="n">uint8</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">uint8</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="c"># 3 (of uint8 type)</span>

<span class="c"># we don't want to risk subtracting unsigned numbers!</span>
<span class="k">proc</span><span class="w"> </span><span class="nf">subtractThese</span><span class="o">[</span><span class="n">T</span><span class="p">:</span><span class="w"> </span><span class="n">SomeSignedInt</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nb">float</span><span class="o">]</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">:</span><span class="w"> </span><span class="n">T</span><span class="p">):</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">b</span>
<span class="n">echo</span><span class="w"> </span><span class="n">subtractThese</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="c"># -1 (of int type)</span>

<span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">sequtils</span>

<span class="c"># constrained generics can also be directly on the parameters</span>
<span class="k">proc</span><span class="w"> </span><span class="nf">compareThese</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">T</span><span class="o">]</span><span class="p">):</span><span class="w"> </span><span class="nb">bool</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">)</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">zip</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">):</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">j</span><span class="p">:</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kp">false</span>
</pre></div><p>One can further clarify which types the procedure will accept by specifying a type class (in the example above, <code>SomeSignedInt</code>).<sup id="cite_ref-81" class="reference"><a href="#cite_note-81"><span class="cite-bracket">[</span>81<span class="cite-bracket">]</span></a></sup>
</p><div class="mw-heading mw-heading4"><h4 id="Macros">Macros</h4></div>
<p>Macros can rewrite parts of the code at compile-time. Nim macros are powerful and can operate on the abstract syntax tree before or after semantic checking.<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span class="cite-bracket">[</span>82<span class="cite-bracket">]</span></a></sup>
</p><p>
Here's a simple example that creates a macro to call code twice:</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">macros</span>

<span class="k">macro</span><span class="w"> </span><span class="nf">twice</span><span class="p">(</span><span class="n">arg</span><span class="p">:</span><span class="w"> </span><span class="n">untyped</span><span class="p">):</span><span class="w"> </span><span class="n">untyped</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">quote</span><span class="w"> </span><span class="k">do</span><span class="p">:</span>
<span class="w"> </span><span class="p">`</span><span class="n">arg</span><span class="p">`</span>
<span class="w"> </span><span class="p">`</span><span class="n">arg</span><span class="p">`</span>

<span class="n">twice</span><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"Hello world!"</span>
</pre></div><p>
The <code>twice</code> macro in this example takes the echo statement in the form of an abstract syntax tree as input. In this example we decided to return this syntax tree without any manipulations applied to it. But we do it twice, hence the name of the macro. The result is that the code gets rewritten by the macro to look like the following code at compile time:</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="n">echo</span><span class="w"> </span><span class="s">"Hello world!"</span>
<span class="n">echo</span><span class="w"> </span><span class="s">"Hello world!"</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Foreign_function_interface_(FFI)">Foreign function interface (FFI)</h3></div>
<p>Nim's FFI is used to call functions written in the other programming languages that it can compile to. This means that libraries written in C, C++, Objective-C, and JavaScript can be used in the Nim source code. One should be aware that both JavaScript and C, C++, or Objective-C libraries cannot be combined in the same program, as they are not as compatible with JavaScript as they are with each other. Both C++ and Objective-C are based on and compatible with C, but JavaScript is incompatible, as a dynamic, client-side web-based language.<sup id="cite_ref-NimAction_21-3" class="reference"><a href="#cite_note-NimAction-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 226">: 226 </span></sup>
</p><p>The following program shows the ease with which external C code can be used directly in Nim.
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">proc</span><span class="w"> </span><span class="nf">printf</span><span class="p">(</span><span class="n">formatstr</span><span class="p">:</span><span class="w"> </span><span class="n">cstring</span><span class="p">)</span><span class="w"> </span><span class="sx">{.header</span>:<span class="w"> </span><span class="sx">"&lt;stdio.h&gt;", varargs.}</span>

<span class="n">printf</span><span class="p">(</span><span class="s">"%s %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="s">"foo"</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">)</span>
</pre></div>
<p>In this code the <code>printf</code> function is imported into Nim and then used.
</p><p>Basic example using 'console.log' directly for the <a href="JavaScript" title="JavaScript">JavaScript</a> compiling target:
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="k">proc</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="n">args</span><span class="p">:</span><span class="w"> </span><span class="n">any</span><span class="p">)</span><span class="w"> </span><span class="sx">{.importjs</span>:<span class="w"> </span><span class="sx">"console.log(@)", varargs.}</span>
<span class="n">log</span><span class="p">(</span><span class="mi">42</span><span class="p">,</span><span class="w"> </span><span class="s">"z"</span><span class="p">,</span><span class="w"> </span><span class="kp">true</span><span class="p">,</span><span class="w"> </span><span class="mf">3.14</span><span class="p">)</span>
</pre></div>
<p>The JavaScript code produced by the Nim compiler can be executed with <a href="Node.js" title="Node.js">Node.js</a> or a web browser.
</p>
<div class="mw-heading mw-heading3"><h3 id="Parallelism">Parallelism</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><p>
To activate threading support in Nim, a program should be compiled with <code>--threads:on</code> command line argument. Each thread has a separate garbage collected heap and sharing of memory is restricted, which helps with efficiency and stops race conditions by the threads.</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">locks</span>

<span class="kd">var</span>
<span class="w"> </span><span class="n">thr</span><span class="p">:</span><span class="w"> </span><span class="nb">array</span><span class="o">[</span><span class="mf">0</span><span class="p">..</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">Thread</span><span class="o">[</span><span class="k">tuple</span><span class="o">[</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="o">]]]</span>
<span class="w"> </span><span class="n">L</span><span class="p">:</span><span class="w"> </span><span class="n">Lock</span>

<span class="k">proc</span><span class="w"> </span><span class="nf">threadFunc</span><span class="p">(</span><span class="n">interval</span><span class="p">:</span><span class="w"> </span><span class="k">tuple</span><span class="o">[</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="o">]</span><span class="p">)</span><span class="w"> </span><span class="sx">{.thread.}</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">interval</span><span class="p">.</span><span class="n">a</span><span class="p">..</span><span class="n">interval</span><span class="p">.</span><span class="n">b</span><span class="p">:</span>
<span class="w"> </span><span class="n">acquire</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="w"> </span><span class="c"># lock stdout</span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="n">i</span>
<span class="w"> </span><span class="n">release</span><span class="p">(</span><span class="n">L</span><span class="p">)</span>

<span class="n">initLock</span><span class="p">(</span><span class="n">L</span><span class="p">)</span>

<span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mf">0</span><span class="p">..</span><span class="n">high</span><span class="p">(</span><span class="n">thr</span><span class="p">):</span>
<span class="w"> </span><span class="n">createThread</span><span class="p">(</span><span class="n">thr</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">threadFunc</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">*</span><span class="mi">10</span><span class="o">+</span><span class="mi">5</span><span class="p">))</span>
<span class="n">joinThreads</span><span class="p">(</span><span class="n">thr</span><span class="p">)</span>
</pre></div><p>Nim also has a <code>channels</code> module that simplifies passing data between threads.</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/</span><span class="n">os</span>

<span class="k">type</span>
<span class="w"> </span><span class="n">CalculationTask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
<span class="w"> </span><span class="n">id</span><span class="o">*</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>
<span class="w"> </span><span class="n">data</span><span class="o">*</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>

<span class="w"> </span><span class="n">CalculationResult</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
<span class="w"> </span><span class="n">id</span><span class="o">*</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>
<span class="w"> </span><span class="n">result</span><span class="o">*</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>

<span class="kd">var</span><span class="w"> </span><span class="n">task_queue</span><span class="p">:</span><span class="w"> </span><span class="n">Channel</span><span class="o">[</span><span class="n">CalculationTask</span><span class="o">]</span>
<span class="kd">var</span><span class="w"> </span><span class="n">result_queue</span><span class="p">:</span><span class="w"> </span><span class="n">Channel</span><span class="o">[</span><span class="n">CalculationResult</span><span class="o">]</span>

<span class="k">proc</span><span class="w"> </span><span class="nf">workerFunc</span><span class="p">()</span><span class="w"> </span><span class="sx">{.thread.}</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">result_queue</span><span class="p">.</span><span class="n">open</span><span class="p">()</span>

<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="kp">true</span><span class="p">:</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">task_queue</span><span class="p">.</span><span class="n">recv</span><span class="p">()</span>
<span class="w"> </span><span class="n">result_queue</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">CalculationResult</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">:</span><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">data</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p">))</span>

<span class="kd">var</span><span class="w"> </span><span class="n">workerThread</span><span class="p">:</span><span class="w"> </span><span class="n">Thread</span><span class="o">[</span><span class="n">void</span><span class="o">]</span>
<span class="n">createThread</span><span class="p">(</span><span class="n">workerThread</span><span class="p">,</span><span class="w"> </span><span class="n">workerFunc</span><span class="p">)</span>

<span class="n">task_queue</span><span class="p">.</span><span class="n">open</span><span class="p">()</span>
<span class="n">task_queue</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">CalculationTask</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="p">:</span><span class="w"> </span><span class="mi">13</span><span class="p">))</span>
<span class="n">task_queue</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">CalculationTask</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="p">:</span><span class="w"> </span><span class="mi">37</span><span class="p">))</span>

<span class="k">while</span><span class="w"> </span><span class="kp">true</span><span class="p">:</span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"got result: "</span><span class="p">,</span><span class="w"> </span><span class="n">repr</span><span class="p">(</span><span class="n">result_queue</span><span class="p">.</span><span class="n">recv</span><span class="p">())</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Concurrency">Concurrency</h3></div>
<p>
Asynchronous IO is supported either via the <code>asyncdispatch</code> module in the standard library or the external <code>chronos</code> library.<sup id="cite_ref-83" class="reference"><a href="#cite_note-83"><span class="cite-bracket">[</span>83<span class="cite-bracket">]</span></a></sup> Both libraries add <a href="Async/await" title="Async/await">async/await</a> syntax via the macro system, without need for special language support. An example of an asynchronous <a href="Hypertext_Transfer_Protocol" class="mw-redirect" title="Hypertext Transfer Protocol">HTTP</a> server:</p><div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">std</span><span class="o">/[</span><span class="n">asynchttpserver</span><span class="p">,</span><span class="w"> </span><span class="n">asyncdispatch</span><span class="o">]</span>
<span class="c"># chronos could also be alternatively used in place of asyncdispatch,</span>
<span class="c"># with no other changes.</span>

<span class="kd">var</span><span class="w"> </span><span class="n">server</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newAsyncHttpServer</span><span class="p">()</span>
<span class="k">proc</span><span class="w"> </span><span class="nf">cb</span><span class="p">(</span><span class="n">req</span><span class="p">:</span><span class="w"> </span><span class="n">Request</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">req</span><span class="p">.</span><span class="n">respond</span><span class="p">(</span><span class="n">Http200</span><span class="p">,</span><span class="w"> </span><span class="s">"Hello World"</span><span class="p">)</span>

<span class="n">waitFor</span><span class="w"> </span><span class="n">server</span><span class="p">.</span><span class="n">serve</span><span class="p">(</span><span class="n">Port</span><span class="p">(</span><span class="mi">8080</span><span class="p">),</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Community">Community</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Online">Online</h3></div>
<p>Nim has an active community on the self-hosted, self-developed official forum.<sup id="cite_ref-84" class="reference"><a href="#cite_note-84"><span class="cite-bracket">[</span>84<span class="cite-bracket">]</span></a></sup> Further, the project uses a Git repository, bug tracker, RFC tracker, and wiki hosted by <a href="GitHub" title="GitHub">GitHub</a>, where the community engages with the language.<sup id="cite_ref-85" class="reference"><a href="#cite_note-85"><span class="cite-bracket">[</span>85<span class="cite-bracket">]</span></a></sup> There are also official online chat rooms, bridged between <a href="Internet_Relay_Chat" class="mw-redirect" title="Internet Relay Chat">IRC</a>, <a href="Matrix_(protocol)" title="Matrix (protocol)">Matrix</a>, <a href="Discord" title="Discord">Discord</a>, <a href="Gitter" title="Gitter">Gitter</a>, and <a href="Telegram_(software)" title="Telegram (software)">Telegram</a>.<sup id="cite_ref-86" class="reference"><a href="#cite_note-86"><span class="cite-bracket">[</span>86<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Conventions">Conventions</h3></div>
<p>The first Nim conference, NimConf, took place on June 20, 2020. It was held digitally due to <a href="COVID-19" title="COVID-19">COVID-19</a>, with an open call for contributor talks in the form of <a href="YouTube" title="YouTube">YouTube</a> videos.<sup id="cite_ref-87" class="reference"><a href="#cite_note-87"><span class="cite-bracket">[</span>87<span class="cite-bracket">]</span></a></sup> The conference began with language overviews by Nim developers Andreas Rumpf and Dominik Picheta. Presentation topics included talks about web frameworks, <a href="Mobile_development" class="mw-redirect" title="Mobile development">mobile development</a>, <a href="Internet_of_things" title="Internet of things">Internet of things</a> (IoT) devices, and <a href="Game_development" class="mw-redirect" title="Game development">game development</a>, including a talk about writing Nim for <a href="Game_Boy_Advance" title="Game Boy Advance">Game Boy Advance</a>.<sup id="cite_ref-88" class="reference"><a href="#cite_note-88"><span class="cite-bracket">[</span>88<span class="cite-bracket">]</span></a></sup> NimConf 2020 is available as a YouTube playlist.<sup id="cite_ref-89" class="reference"><a href="#cite_note-89"><span class="cite-bracket">[</span>89<span class="cite-bracket">]</span></a></sup> NimConf 2021 occurred the following year, was also held digitally, and included talks about <a href="Video_game_development" title="Video game development">game development</a>, <a href="Read%E2%80%93eval%E2%80%93print_loop" title="Read–eval–print loop">REPLs</a>, <a href="Real-time_operating_system" title="Real-time operating system">real-time operating systems</a>, Nim in the industry, <a href="Object%E2%80%93relational_mapping" title="Object–relational mapping">object-relational mapping</a> (ORM), <a href="Fuzzing" title="Fuzzing">fuzzing</a>, <a href="Programming_language_design" class="mw-redirect" title="Programming language design">language design</a>, and <a href="Graphics_library" title="Graphics library">graphics libraries</a>.<sup id="cite_ref-90" class="reference"><a href="#cite_note-90"><span class="cite-bracket">[</span>90<span class="cite-bracket">]</span></a></sup>
</p><p>In addition to official conferences, Nim has been featured at various other conventions. A presentation on Nim was given at the <a href="O'Reilly_Open_Source_Convention" title="O'Reilly Open Source Convention">O'Reilly Open Source Convention</a> (OSCON) in 2015.<sup id="cite_ref-91" class="reference"><a href="#cite_note-91"><span class="cite-bracket">[</span>91<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-92" class="reference"><a href="#cite_note-92"><span class="cite-bracket">[</span>92<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-93" class="reference"><a href="#cite_note-93"><span class="cite-bracket">[</span>93<span class="cite-bracket">]</span></a></sup> Four speakers represented Nim at <a href="FOSDEM" title="FOSDEM">FOSDEM</a> 2020, including the creator of the language, Andreas Rumpf.<sup id="cite_ref-94" class="reference"><a href="#cite_note-94"><span class="cite-bracket">[</span>94<span class="cite-bracket">]</span></a></sup> At FOSDEM 2022, Nim hosted their own developer room virtually due to the <a href="COVID-19_pandemic" title="COVID-19 pandemic">COVID-19 pandemic</a>.<sup id="cite_ref-95" class="reference"><a href="#cite_note-95"><span class="cite-bracket">[</span>95<span class="cite-bracket">]</span></a></sup> Talks were held on <a href="Concurrency_(computer_science)" title="Concurrency (computer science)">concurrency</a>, <a href="Embedded_software" title="Embedded software">embedded programming</a>, programming for <a href="Graphics_processing_unit" title="Graphics processing unit">GPUs</a>, <a href="Entity_component_system" title="Entity component system">entity-component systems</a>, <a href="Video_game_development" title="Video game development">game development</a>, <a href="Rules_engine" class="mw-redirect" title="Rules engine">rules engines</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a> <a href="Interoperability" title="Interoperability">interop</a>, and <a href="Metaprogramming" title="Metaprogramming">metaprogramming</a>.<sup id="cite_ref-96" class="reference"><a href="#cite_note-96"><span class="cite-bracket">[</span>96<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */


.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}


/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="Crystal_(programming_language)" title="Crystal (programming language)">Crystal (programming language)</a></li>
<li><a href="D_(programming_language)" title="D (programming language)">D (programming language)</a></li>
<li><a href="Fat_pointer" class="mw-redirect" title="Fat pointer">Fat pointer</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim/graphs/contributors">"Contributors to nim-lang/Nim"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2022-03-23</span></span>.</cite></span>
</li>
<li id="cite_note-wikidata-83a142d5398fc9c18f74b427e707b0d4b8840ec1-v20-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-83a142d5398fc9c18f74b427e707b0d4b8840ec1-v20_2-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"> <a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim/releases/tag/v2.2.4">https://github.com/nim-lang/Nim/releases/tag/v2.2.4</a>.</cite> <span class="cs1-visible-error citation-comment"><code class="cs1-code">{{cite web}}</code>: </span><span class="cs1-visible-error citation-comment">Missing or empty <code class="cs1-code">|title=</code> (help)</span></span>
</li>
<li id="cite_note-nimbyex-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-nimbyex_3-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-by-example.github.io/">"Nim by example"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-nimrodbg-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-nimrodbg_4-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFКараджовСтанимиров2014" class="citation conference cs1 cs1-prop-foreign-lang-source">Караджов, Захари; Станимиров, Борислав (2014). <a rel="nofollow" class="external text" href="https://ibob.github.io/slides/nimrodbg/#/"><i>Метапрограмиране с Nimrod</i></a>. <a rel="nofollow" class="external text" href="http://varnaconf.com/">VarnaConf</a> (in Bulgarian)<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-27</span></span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/packaging.html">"Packaging Nim"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2022-03-23</span></span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/install.html">"Install Nim"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-wikidata-2c4faa04ba9ab7f7c7e7132058c318982dc51916-v20-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-2c4faa04ba9ab7f7c7e7132058c318982dc51916-v20_7-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim/blob/devel/copying.txt">"copying.txt"</a>. <i>GitHub</i>.</cite></span>
</li>
<li id="cite_note-parasail-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-parasail_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-parasail_8-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFRumpf2017" class="citation web cs1">Rumpf, Andreas (2017-10-19). <a rel="nofollow" class="external text" href="https://nim-lang.org/araq/destructors.html">"Nim without GC"</a>. <i>Araq's Musings</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-09-01</span></span>.</cite></span>
</li>
<li id="cite_note-drdobbs-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-drdobbs_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-drdobbs_9-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFRumpf2014" class="citation web cs1">Rumpf, Andreas (2014-02-11). <a rel="nofollow" class="external text" href="http://www.drdobbs.com/open-source/nimrod-a-new-systems-programming-languag/240165321">"Nimrod: A new systems programming language"</a>. <i><a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-nim-lang-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-nim-lang_10-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://nim-lang.org/">"The Nim Programming Language"</a>. <i>Nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-FAQ-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-FAQ_11-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/faq.html">"FAQ"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-03-27</span></span>.</cite></span>
</li>
<li id="cite_note-Nim_Syntax-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-Nim_Syntax_12-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFKehrer2015" class="citation web cs1">Kehrer, Aaron (akehrer) (2015-01-05). <a rel="nofollow" class="external text" href="https://akehrer.github.io/posts/getting-started-with-nim">"Nim Syntax"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-01-05</span></span>.</cite></span>
</li>
<li id="cite_note-manual-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-manual_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-manual_13-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-manual_13-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/manual.html#term-rewriting-macros">"Nim Manual"</a>. <i>Nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-strangeloop-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-strangeloop_14-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140713011227/https://thestrangeloop.com/sessions/nimrod-a-new-approach-to-meta-programming">"Strangeloop Nim presentation"</a>. Archived from <a rel="nofollow" class="external text" href="https://thestrangeloop.com/sessions/nimrod-a-new-approach-to-meta-programming">the original</a> on 2014-07-13<span class="reference-accessdate">. Retrieved <span class="nowrap">2015-04-30</span></span>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/mm.html">"Nim's Memory Management"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite id="CITEREFBinstock2014" class="citation web cs1">Binstock, Andrew (2014-01-07). <a rel="nofollow" class="external text" href="http://www.drdobbs.com/jvm/the-rise-and-fall-of-languages-in-2013/240165192">"The Rise And Fall of Languages in 2013"</a>. <i><a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-08</span></span>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/nimc.html">Nim Compiler User Guide</a></span>
</li>
<li id="cite_note-:1-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-:1_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:1_18-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFSieka2020" class="citation cs2">Sieka, Jacek (2020-07-18), <a rel="nofollow" class="external text" href="https://github.com/arnetheduck/nlvm"><i>arnetheduck/nlvm</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2020-07-21</span></span></cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim/releases">"Nim Releases"</a>. Nim Project<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-01-26</span></span>.</cite></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><cite id="CITEREFAndreas_Rumpf" class="citation book cs1">Andreas Rumpf. <i>Mastering Nim: A complete guide to the programming language</i>.</cite></span>
</li>
<li id="cite_note-NimAction-21"><span class="mw-cite-backlink">^ <a href="#cite_ref-NimAction_21-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-NimAction_21-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-NimAction_21-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-NimAction_21-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFPicheta2017" class="citation book cs1">Picheta, Dominik (2017). <i>Nim in Action</i>. Manning Publications. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-1617293436</bdi>.</cite></span>
</li>
<li id="cite_note-pas-sources-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-pas-sources_22-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Araq/Nim/tree/ea1f1ec6d4d6c776eb0f81c2bebdd4cb4c817ebe/nim">"Nim Pascal Sources"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-04-05</span></span>.</cite></span>
</li>
<li id="cite_note-news-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-news_23-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://nim-lang.org:80/news.html">"News"</a>. <i>Nim-lang.org</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160626002904/http://nim-lang.org/news.html">Archived</a> from the original on 2016-06-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-06-11</span></span>.</cite></span>
</li>
<li id="cite_note-contributors-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-contributors_24-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Araq/Nim/contributors">"Contributors"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-04-05</span></span>.</cite></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><cite id="CITEREFPicheta2014" class="citation web cs1">Picheta, Dominik (2014-12-29). <a rel="nofollow" class="external text" href="https://nim-lang.org/blog/2014/12/29/version-0102-released.html">"Version 0.10.2 released"</a>. <i>Nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-17</span></span>.</cite></span>
</li>
<li id="cite_note-Nim_v2.0_released-26"><span class="mw-cite-backlink">^ <a href="#cite_ref-Nim_v2.0_released_26-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Nim_v2.0_released_26-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/blog/2023/08/01/nim-v20-released.html">"Nim v2.0 released"</a>. <i>Nim Programming Language</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-Yegulalp-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-Yegulalp_27-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFYegulalp2017" class="citation web cs1">Yegulalp, Serdar (2017-01-16). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/3157745/application-development/nim-language-draws-from-best-of-python-rust-go-and-lisp.html">"Nim language draws from best of Python, Rust, Go, and Lisp"</a>. <i>InfoWorld</i>.</cite></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=-9SGIB946lw"><i>Interview with Nim language creator Andreas Rumpf</i></a>, 2020-03-09<span class="reference-accessdate">, retrieved <span class="nowrap">2023-10-15</span></span></cite></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://nim-lang.org/docs/manual.html#procedures-method-call-syntax">"Nim Manual: Method call syntax"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/manual.html#lexical-analysis-identifier-equality">"Nim Manual: Identifier Equality"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><cite id="CITEREFPichetaWetherfordshireFelsingRaaf2017" class="citation web cs1">Picheta, Dominik (dom96); Wetherfordshire, Billingsly (fowlmouth); Felsing, Dennis (def-); Raaf, Hans (oderwat); Dunn, Christopher (cdunn2001); wizzardx (2017-10-25). <a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim/wiki/Tips-and-tricks">"Tips and tricks"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-17</span></span>.</cite><span class="cs1-maint citation-comment"><code class="cs1-code">{{cite web}}</code>: CS1 maint: numeric names: authors list (link)</span></span>
</li>
<li id="cite_note-infoq-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-infoq_32-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFRumpf2014" class="citation audio-visual cs1">Rumpf, Andreas (2014-01-15). <a rel="nofollow" class="external text" href="http://www.infoq.com/presentations/nimrod"><i>Nimrod: A New Approach to Metaprogramming</i></a>. <i>InfoQ</i>. Event occurs at 2:23<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><cite id="CITEREFRumpf2018" class="citation web cs1">Rumpf, Andreas (2018-10-12). <a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim#compiling">"Nim Compiling"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-17</span></span>.</cite></span>
</li>
<li id="cite_note-build-mode-34"><span class="mw-cite-backlink">^ <a href="#cite_ref-build-mode_34-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-build-mode_34-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-build-mode_34-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/nimc.html#compiler-usage-configuration-files">"Nim Compiler User Guide"</a>.</cite></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/mm.html">"Nim's Memory Management"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-07-28</span></span>.</cite></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/blog/2020/10/15/introduction-to-arc-orc-in-nim.html">"Introduction to ARC/ORC in Nim"</a>. <i>Nim Programming Language</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/blog/2020/12/08/introducing-orc.html">"ORC - Vorsprung durch Algorithmen"</a>. <i>Nim Programming Language</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/nimble">"Nimble"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim/commit/49d810f3410c19803f2d6fbfb3feb03e1fc13fee">"Nim v0.12.0 release"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-11-28</span></span>.</cite></span>
</li>
<li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/c2nim">"c2nim"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/koch.html">"Nim maintenance script"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-16</span></span>.</cite></span>
</li>
<li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/nimgrep.html">"nimgrep User's manual"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-16</span></span>.</cite></span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/nimsuggest.html">"Nim IDE Integration Guide"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-16</span></span>.</cite></span>
</li>
<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/niminst.html">"niminst User's manual"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-16</span></span>.</cite></span>
</li>
<li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/tools.html">"Tools available with Nim"</a>. <i>nim-lang.org</i>. 2021-10-19. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150509003939/https://nim-lang.org/docs/tools.html">Archived</a> from the original on 2015-05-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2022-02-18</span></span>.</cite></span>
</li>
<li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/dom96/choosenim">"choosenim"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><cite id="CITEREFGlukhov2021" class="citation cs2">Glukhov, Yuriy (2021-11-12), <a rel="nofollow" class="external text" href="https://github.com/yglukhov/nimpy"><i>nimpy</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://github.com/nimterop/nimterop"><i>nimterop/nimterop</i></a>, nimterop, 2021-11-12<span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/lib.html">Nim Standard Library</a></span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/gtk2"><i>Installation</i></a>, The Nim programming language, 2021-09-25<span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text"><cite id="CITEREFStefanSalewski2021" class="citation cs2">StefanSalewski (2021-11-15), <a rel="nofollow" class="external text" href="https://github.com/StefanSalewski/gintro"><i>High level GTK4 and GTK3 bindings for the Nim programming language</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/status-im/NimQml">"NimQml"</a>. <i>GitHub</i>. 2022-11-10.</cite></span>
</li>
<li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/PMunch/wxnim">"WxNim"</a>. <i>GitHub</i>. 2022-11-29.</cite></span>
</li>
<li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/sdl2"><i>SDL2 for Nim</i></a>, The Nim programming language, 2021-10-26<span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><cite id="CITEREFArabadzhi2021" class="citation cs2">Arabadzhi, Vladimir (2021-11-15), <a rel="nofollow" class="external text" href="https://github.com/Vladar4/sdl2_nim"><i>sdl2_nim 2.0.14.2</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-56">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/planetis-m/naylib">"naylib"</a>. <i>GitHub</i>. 2024-07-28.</cite></span>
</li>
<li id="cite_note-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-57">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/godot-nim">"godot-nim"</a>. <i>GitHub</i>. 2024-07-28.</cite></span>
</li>
<li id="cite_note-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-58">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/jmgomez/NimForUE">"NimForUE"</a>. <i>GitHub</i>. 2024-07-28.</cite></span>
</li>
<li id="cite_note-59"><span class="mw-cite-backlink"><b><a href="#cite_ref-59">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/cairo"><i>Cairo</i></a>, The Nim programming language, 2021-10-05<span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-60"><span class="mw-cite-backlink"><b><a href="#cite_ref-60">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://github.com/nim-lang/opengl"><i>opengl</i></a>, The Nim programming language, 2021-11-14<span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-61"><span class="mw-cite-backlink"><b><a href="#cite_ref-61">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/nimgl/vulkan">"vulkan"</a>. <i>GitHub</i>. 2024-07-28.</cite></span>
</li>
<li id="cite_note-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-62">^</a></b></span> <span class="reference-text"><cite id="CITEREFWard2021" class="citation cs2">Ward (2021-11-15), <a rel="nofollow" class="external text" href="https://github.com/khchen/winim"><i>Winim</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2021-11-16</span></span></cite></span>
</li>
<li id="cite_note-lib-63"><span class="mw-cite-backlink"><b><a href="#cite_ref-lib_63-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150406053933/http://nim-lang.org/lib.html">"Nim Standard Library"</a>. <i>Nim documentation</i>. Archived from <a rel="nofollow" class="external text" href="http://nim-lang.org/lib.html">the original</a> on 2015-04-06<span class="reference-accessdate">. Retrieved <span class="nowrap">2015-04-04</span></span>.</cite></span>
</li>
<li id="cite_note-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-64">^</a></b></span> <span class="reference-text"><cite id="CITEREFLim2018" class="citation web cs1">Lim, Andri (jangko) (2018-10-17). <a rel="nofollow" class="external text" href="https://github.com/jangko/nimLUA">"nimLUA"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-17</span></span>.</cite></span>
</li>
<li id="cite_note-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-65">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Clonkk/nimjl">"NimJL"</a>. <i>GitHub</i>. 2022-08-24.</cite></span>
</li>
<li id="cite_note-66"><span class="mw-cite-backlink"><b><a href="#cite_ref-66">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/arnetheduck/nbindgen">"Nbindgen"</a>. <i>GitHub</i>. 2022-11-17.</cite></span>
</li>
<li id="cite_note-67"><span class="mw-cite-backlink"><b><a href="#cite_ref-67">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/kobi2187/cs2nim">"cs2nim"</a>. <i>GitHub</i>. 2022-10-10.</cite></span>
</li>
<li id="cite_note-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-68">^</a></b></span> <span class="reference-text"><cite id="CITEREFGlukhov2020" class="citation cs2">Glukhov, Yuriy (2020-07-20), <a rel="nofollow" class="external text" href="https://github.com/yglukhov/nimpy"><i>yglukhov/nimpy</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2020-07-21</span></span></cite></span>
</li>
<li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/bung87/ts2nim">"ts2nim"</a>. <i>GitHub</i>. 2022-11-21.</cite></span>
</li>
<li id="cite_note-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-70">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/manual.html#procedures-func">"Nim Manual"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-07-10</span></span>.</cite></span>
</li>
<li id="cite_note-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-71">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://forum.nim-lang.org/t/9716">"Nim Forum: Update on strict funcs"</a>. <i>forum.nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-72">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-by-example.github.io/procvars/">"Nim by Example - First Class Functions"</a>.</cite></span>
</li>
<li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/manual_experimental.html#strict-funcs">"Nim Experimental Features: Strict Funcs"</a>.</cite></span>
</li>
<li id="cite_note-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-74">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/manual.html#procedures-func">"Nim Manual: Func"</a>.</cite></span>
</li>
<li id="cite_note-75"><span class="mw-cite-backlink"><b><a href="#cite_ref-75">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/sequtils.html">"std/sequtils"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-76"><span class="mw-cite-backlink"><b><a href="#cite_ref-76">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/manual.html#types-object-variants">"Nim Manual: Object variants"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-77"><span class="mw-cite-backlink"><b><a href="#cite_ref-77">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.github.io/fusion/src/fusion/matching.html">"src/fusion/matching"</a>. <i>nim-lang.github.io</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-78"><span class="mw-cite-backlink"><b><a href="#cite_ref-78">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/tut2.html#object-oriented-programming">"Nim Tutorial (Part II): Object Oriented Programming"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-:0-79"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_79-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_79-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-:0_79-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-:0_79-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-by-example.github.io/oop/">"Nim by Example - Object Oriented Programming"</a>. <i>nim-by-example.github.io</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-80"><span class="mw-cite-backlink"><b><a href="#cite_ref-80">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/exceptions.html">"system/exceptions"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-81"><span class="mw-cite-backlink"><b><a href="#cite_ref-81">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/manual.html#generics-type-classes">"Nim Manual: Type Classes"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-21</span></span>.</cite></span>
</li>
<li id="cite_note-82"><span class="mw-cite-backlink"><b><a href="#cite_ref-82">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/tut3.html">"Nim Tutorial (Part III)"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-83"><span class="mw-cite-backlink"><b><a href="#cite_ref-83">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://github.com/status-im/nim-chronos"><i>Chronos - An efficient library for asynchronous programming</i></a>, Status, 2023-08-14<span class="reference-accessdate">, retrieved <span class="nowrap">2023-08-17</span></span></cite></span>
</li>
<li id="cite_note-84"><span class="mw-cite-backlink"><b><a href="#cite_ref-84">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://forum.nim-lang.org">"Nim Forum"</a>. nim-lang.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2015-05-04</span></span>.</cite></span>
</li>
<li id="cite_note-85"><span class="mw-cite-backlink"><b><a href="#cite_ref-85">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Araq/Nim">"Primary source code repository and bug tracker"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-05-04</span></span>.</cite></span>
</li>
<li id="cite_note-86"><span class="mw-cite-backlink"><b><a href="#cite_ref-86">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/community.html">"Community"</a>. <i>Nim Programming Language</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-87"><span class="mw-cite-backlink"><b><a href="#cite_ref-87">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/blog/2020/05/14/nim-conference.html">"Nim Online Conference 2020"</a>. <i>Nim</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-11-28</span></span>.</cite></span>
</li>
<li id="cite_note-88"><span class="mw-cite-backlink"><b><a href="#cite_ref-88">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://conf.nim-lang.org/2020/">"NimConf 2020"</a>. <i>Nim</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-89"><span class="mw-cite-backlink"><b><a href="#cite_ref-89">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.youtube.com/playlist?list=PLxLdEZg8DRwTIEzUpfaIcBqhsj09mLWHx">"NimConf 2020 Playlist"</a>. <i>YouTube</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-11-28</span></span>.</cite></span>
</li>
<li id="cite_note-90"><span class="mw-cite-backlink"><b><a href="#cite_ref-90">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://conf.nim-lang.org/">"NimConf 2021"</a>. <i>NimConf 2021</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-91"><span class="mw-cite-backlink"><b><a href="#cite_ref-91">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20151006182449/http://www.oscon.com/open-source-2015/public/schedule/detail/42497">"Nim at OSCON 2015"</a>. <i><a href="O'Reilly_Open_Source_Convention" title="O'Reilly Open Source Convention">O'Reilly Open Source Convention</a> (OSCON)</i>. O'Reilly Media. 2015-07-20. Archived from <a rel="nofollow" class="external text" href="http://www.oscon.com/open-source-2015/public/schedule/detail/42497">the original</a> on 2015-10-06<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-17</span></span>.</cite></span>
</li>
<li id="cite_note-92"><span class="mw-cite-backlink"><b><a href="#cite_ref-92">^</a></b></span> <span class="reference-text"><cite id="CITEREFRumpfSwartzHarrison" class="citation web cs1">Rumpf, Andreas; Swartz, Jason; Harrison, Matt. <a rel="nofollow" class="external text" href="http://www.oreilly.com/pub/e/3420">"Essential Languages: Nim, Scala, Python"</a>. <i>O’Reilly</i>. O'Reilly Media<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-17</span></span>.</cite></span>
</li>
<li id="cite_note-93"><span class="mw-cite-backlink"><b><a href="#cite_ref-93">^</a></b></span> <span class="reference-text"><cite id="CITEREFRumpf2015" class="citation audio-visual cs1">Rumpf, Andreas (2015-10-26). <a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=4rJEBs_Nnaw"><i>OSCON 2015 – Nim: An Overview</i></a>. <i>YouTube</i> (Video)<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-94"><span class="mw-cite-backlink"><b><a href="#cite_ref-94">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://fosdem.org/2020/schedule/events/">"Events"</a>. <i>fosdem.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-17</span></span>.</cite></span>
</li>
<li id="cite_note-95"><span class="mw-cite-backlink"><b><a href="#cite_ref-95">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/blog/2021/12/02/fosdem-2022-cfp.html">"Nim Devroom at FOSDEM 2022 - Call for Participation"</a>. <i>Nim Programming Language</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
<li id="cite_note-96"><span class="mw-cite-backlink"><b><a href="#cite_ref-96">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://archive.fosdem.org/2022/schedule/track/nim_programming_language/">"Nim Programming Language devroom"</a>. <i>archive.fosdem.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-08-17</span></span>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://nim-lang.org/">Official website</a></span></span> </li>
<li><a rel="nofollow" class="external text" href="https://github.com/nim-lang/Nim">Nim</a> on <a href="GitHub" title="GitHub">GitHub</a></li>
<li><a rel="nofollow" class="external text" href="https://stackoverflow.com/questions/tagged/nim-lang">Information about Nim</a> on <a href="Stack_Overflow" title="Stack Overflow">Stack Overflow</a></li>
<li><a rel="nofollow" class="external text" href="http://ssalewski.de/nimprogramming.html">Computer Programming with the Nim Programming Language</a> A gentle Introduction by Stefan Salewski</li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Programming_languages625" style="padding:3px"><table class="nowraplinks hlist mw-collapsible expanded navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Programming_languages625" style="font-size:114%;margin:0 4em"><a href="Programming_language" title="Programming language">Programming languages</a></div></th></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<ul><li><a href="Comparison_of_programming_languages" title="Comparison of programming languages">Comparison</a></li>
<li><a href="Timeline_of_programming_languages" title="Timeline of programming languages">Timeline</a></li>
<li><a href="History_of_programming_languages" title="History of programming languages">History</a></li></ul>
</div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Ada_(programming_language)" title="Ada (programming language)">Ada</a></li>
<li><a href="ALGOL" title="ALGOL">ALGOL</a>
<ul><li><a href="Simula" title="Simula">Simula</a></li></ul></li>
<li><a href="APL_(programming_language)" title="APL (programming language)">APL</a></li>
<li><a href="Assembly_language" title="Assembly language">Assembly</a></li>
<li><a href="BASIC" title="BASIC">BASIC</a>
<ul><li><a href="Visual_Basic" title="Visual Basic">Visual Basic</a>
<ul><li><a href="Visual_Basic_(classic)" title="Visual Basic (classic)">classic</a></li>
<li><a href="Visual_Basic_(.NET)" title="Visual Basic (.NET)">.NET</a></li></ul></li></ul></li>
<li><a href="C_(programming_language)" title="C (programming language)">C</a></li>
<li><a href="C%2B%2B" title="C++">C++</a></li>
<li><a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a></li>
<li><a href="COBOL" title="COBOL">COBOL</a></li>
<li><a href="Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>
<ul><li><a href="Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a></li></ul></li>
<li><a href="Forth_(programming_language)" title="Forth (programming language)">Forth</a></li>
<li><a href="Fortran" title="Fortran">Fortran</a></li>
<li><a href="Go_(programming_language)" title="Go (programming language)">Go</a></li>
<li><a href="Haskell" title="Haskell">Haskell</a></li>
<li><a href="Java_(programming_language)" title="Java (programming language)">Java</a></li>
<li><a href="JavaScript" title="JavaScript">JavaScript</a></li>
<li><a href="Julia_(programming_language)" title="Julia (programming language)">Julia</a></li>
<li><a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></li>
<li><a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a></li>
<li><a href="Lua" title="Lua">Lua</a></li>
<li><a href="MATLAB" title="MATLAB">MATLAB</a></li>
<li><a href="ML_(programming_language)" title="ML (programming language)">ML</a>
<ul><li><a href="Caml" title="Caml">Caml </a>
<ul><li><a href="OCaml" title="OCaml">OCaml</a></li></ul></li></ul></li>
<li><a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a>
<ul><li><a href="Object_Pascal" title="Object Pascal">Object Pascal</a></li></ul></li>
<li><a href="Perl" title="Perl">Perl </a>
<ul><li><a href="Raku_(programming_language)" title="Raku (programming language)">Raku</a></li></ul></li>
<li><a href="PHP" title="PHP">PHP</a></li>
<li><a href="Prolog" title="Prolog">Prolog</a></li>
<li><a href="Python_(programming_language)" title="Python (programming language)">Python</a></li>
<li><a href="R_(programming_language)" title="R (programming language)">R</a></li>
<li><a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></li>
<li><a href="Rust_(programming_language)" title="Rust (programming language)">Rust</a></li>
<li><a href="SAS_language" title="SAS language">SAS</a></li>
<li><a href="SQL" title="SQL">SQL</a></li>
<li><a href="Scratch_(programming_language)" title="Scratch (programming language)">Scratch</a></li>
<li><a href="Shell_script" title="Shell script">Shell</a></li>
<li><a href="Smalltalk" title="Smalltalk">Smalltalk</a></li>
<li><a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a></li>
<li><i><a href="List_of_programming_languages" title="List of programming languages">more...</a></i></li></ul>
</div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<ul><li><span class="noviewer" typeof="mw:File"><span title="List-Class article"></span></span> <b>Lists:</b> <a href="List_of_programming_languages" title="List of programming languages">Alphabetical</a></li>
<li><a href="List_of_programming_languages_by_type" title="List of programming languages by type">Categorical</a></li>
<li><a href="Generational_list_of_programming_languages" title="Generational list of programming languages">Generational</a></li>
<li><a href="Non-English-based_programming_languages" title="Non-English-based programming languages">Non-English-based</a></li>
<li><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> Category</li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="JavaScript497" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="JavaScript497" style="font-size:114%;margin:0 4em"><a href="JavaScript" title="JavaScript">JavaScript</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Static_program_analysis" title="Static program analysis">Code analysis</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="ESLint" title="ESLint">ESLint</a></li>
<li><a href="JSHint" title="JSHint">JSHint</a></li>
<li><a href="JSLint" title="JSLint">JSLint</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Subset" title="Subset">Supersets</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="ArkTS" title="ArkTS">ArkTS</a></li>
<li><a href="JS%2B%2B" title="JS++">JS++</a></li>
<li><a href="TypeScript" title="TypeScript">TypeScript</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Source-to-source_compiler" title="Source-to-source compiler">Transpilers</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="AtScript" title="AtScript">AtScript</a></li>
<li><a href="Babel_(transcompiler)" title="Babel (transcompiler)">Babel</a></li>
<li><a href="ClojureScript" class="mw-redirect" title="ClojureScript">ClojureScript</a></li>
<li><a href="CoffeeScript" title="CoffeeScript">CoffeeScript</a></li>
<li><a href="Dart_(programming_language)" title="Dart (programming language)">Dart</a></li>
<li><a href="Elm_(programming_language)" title="Elm (programming language)">Elm</a></li>
<li><a href="Emscripten" title="Emscripten">Emscripten</a></li>
<li><a href="Google_Closure_Compiler" class="mw-redirect" title="Google Closure Compiler">Google Closure Compiler</a></li>
<li><a href="Google_Web_Toolkit" title="Google Web Toolkit">Google Web Toolkit</a></li>
<li><a href="Haxe" title="Haxe">Haxe</a></li>
<li><a href="LiveScript_(programming_language)" title="LiveScript (programming language)">LiveScript</a></li>
<li><a href="Morfik" title="Morfik">Morfik</a></li>

<li><a href="Opa_(programming_language)" title="Opa (programming language)">Opa</a></li>
<li><a href="PureScript" title="PureScript">PureScript</a></li>
<li><a href="Reason_(programming_language)" title="Reason (programming language)">Reason</a></li>
<li><a href="WebSharper" title="WebSharper">WebSharper</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Concepts</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JavaScript_library" title="JavaScript library">JavaScript library</a></li>
<li><a href="JavaScript_syntax" title="JavaScript syntax">JavaScript syntax</a></li>
<li><a href="JavaScript_stack" title="JavaScript stack">JavaScript stack</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Debugger" title="Debugger">Debuggers</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Chrome_(browser)" class="mw-redirect" title="Chrome (browser)">Chrome DevTools</a></li>
<li><a href="Firefox" title="Firefox">Firefox</a> Inspector</li>
<li><a href="Komodo_IDE" title="Komodo IDE">Komodo IDE</a></li>
<li><a href="Safari_(web_browser)" title="Safari (web browser)">Safari</a> Web Inspector</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Documentation_generator" title="Documentation generator">Documentation generators</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JSDoc" title="JSDoc">JSDoc</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Editors (<a href="Comparison_of_JavaScript-based_source_code_editors" title="Comparison of JavaScript-based source code editors">comparison</a>)</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Ace_(editor)" title="Ace (editor)">Ace</a>
<ul><li><a href="Cloud9_IDE" title="Cloud9 IDE">Cloud9 IDE</a></li></ul></li>
<li><a href="Atom_(text_editor)" title="Atom (text editor)">Atom</a></li>
<li><a href="CodeMirror" title="CodeMirror">CodeMirror</a>
<ul><li><a href="Brackets_(text_editor)" title="Brackets (text editor)">Brackets</a></li>
<li><a href="Light_Table_(software)" title="Light Table (software)">Light Table</a></li></ul></li>
<li><a href="PhpStorm" class="mw-redirect" title="PhpStorm">PhpStorm</a></li>
<li><a href="List_of_Eclipse_projects#Top-level_sub-projects" title="List of Eclipse projects">Orion</a></li>
<li><a href="Visual_Studio" title="Visual Studio">Visual Studio</a>
<ul><li><a href="Microsoft_Visual_Studio_Express" title="Microsoft Visual Studio Express">Visual Studio Express</a></li></ul></li>
<li><a href="Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a></li>
<li><a href="Visual_Studio#Azure_DevOps_Services" title="Visual Studio">Visual Studio Team Services</a></li>
<li><a href="Vim_(text_editor)" title="Vim (text editor)">Vim</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="JavaScript_engine" class="mw-redirect" title="JavaScript engine">Engines</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="List_of_ECMAScript_engines" class="mw-redirect" title="List of ECMAScript engines">List of ECMAScript engines</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Software_framework" title="Software framework">Frameworks</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Comparison_of_JavaScript-based_web_frameworks" title="Comparison of JavaScript-based web frameworks">Comparison of JavaScript frameworks</a></li>
<li><a href="List_of_JavaScript_libraries" title="List of JavaScript libraries">List of JavaScript libraries</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Related <a href="Technology" title="Technology">technologies</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Ajax_(programming)" title="Ajax (programming)">Ajax</a></li>
<li><a href="AssemblyScript" title="AssemblyScript">AssemblyScript</a></li>
<li><a href="Asm.js" title="Asm.js">asm.js</a></li>
<li><a href="Cascading_Style_Sheets" class="mw-redirect" title="Cascading Style Sheets">Cascading Style Sheets</a></li>
<li><a href="Document_Object_Model" title="Document Object Model">Document Object Model</a></li>
<li><a href="HTML" title="HTML">HTML</a>
<ul><li><a href="HTML5" title="HTML5">HTML5</a></li></ul></li>
<li><a href="JSON" title="JSON">JSON</a></li>
<li><a href="WebAssembly" title="WebAssembly">WebAssembly</a></li>
<li><a href="WebAuthn" title="WebAuthn">WebAuthn</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Package_manager" title="Package manager">Package managers</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Npm" title="Npm">npm</a></li>
<li><a href="Pnpm" title="Pnpm">pnpm</a></li>
<li><a href="Yarn_(package_manager)" title="Yarn (package manager)">yarn</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Module bundlers</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Webpack" title="Webpack">Webpack</a></li>
<li><a href="Vite_(software)" title="Vite (software)">Vite</a></li>
<li><a href="Esbuild" title="Esbuild">esbuild</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Server-side_JavaScript" class="mw-redirect" title="Server-side JavaScript">Server-side</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Active_Server_Pages" title="Active Server Pages">Active Server Pages</a></li>
<li><a href="Bun_(software)" title="Bun (software)">Bun</a></li>
<li><a href="CommonJS" title="CommonJS">CommonJS</a></li>
<li><a href="Deno_(software)" title="Deno (software)">Deno</a></li>
<li><a href="JSGI" title="JSGI">JSGI</a></li>
<li><a href="Node.js" title="Node.js">Node.js</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Unit_testing" title="Unit testing">Unit testing</a> frameworks (<a href="List_of_unit_testing_frameworks#JavaScript" title="List of unit testing frameworks">list</a>)</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Jasmine_(software)" title="Jasmine (software)">Jasmine</a></li>
<li><a href="Mocha_(JavaScript_framework)" title="Mocha (JavaScript framework)">Mocha</a></li>
<li><a href="QUnit" title="QUnit">QUnit</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Douglas_Crockford" title="Douglas Crockford">Douglas Crockford</a></li>
<li><a href="Ryan_Dahl" title="Ryan Dahl">Ryan Dahl</a></li>
<li><a href="Brendan_Eich" title="Brendan Eich">Brendan Eich</a></li>
<li><a href="John_Resig" title="John Resig">John Resig</a></li>
<li><a href="Jesse_James_Garrett" title="Jesse James Garrett">Jesse James Garrett</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-05-05" href="https://en.wikipedia.org/wiki/?title=Nim_(programming_language)&amp;oldid=1288979051">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>